๐Ÿ’ AIchemist 1th Session | ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์˜ ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ์ƒํƒœ๊ณ„ ์ดํ•ด

yellowsubmarine372ยท2023๋…„ 9์›” 18์ผ

AIchemist

๋ชฉ๋ก ๋ณด๊ธฐ
2/14
post-thumbnail

I. ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์˜ ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ์ƒํƒœ๊ณ„ ์ดํ•ด

01. ๋„˜ํŒŒ์ด ๐Ÿฅง

๋„˜ํŒŒ์ด๋Š” ํŒŒ์ด์ฌ์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ํŒจํ‚ค์ง€

a. ndarray ๊ฐœ์š”

ndarry Numpy์˜ N์ฐจ์› ๋ฐฐ์—ด ๊ฐ์ฒด
1์ฐจ์› ๋ฐฐ์—ด, 2์ฐจ์› ๋ฐฐ์—ด, 3์ฐจ์› ๋ฐฐ์—ด ... ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.

#ndarray
array1 = np.array([1,2,3])
print('array1 type:', type(array1))
print('array1 array ํ˜•ํƒœ:',array1.shape)

array2 = np.array([[1,2,3], [2,3,4]])
print('array2 type:', type(array2))
print('array2 array ํ˜•ํƒœ:', array2.shape)

array3 = np.array([[1,2,3]])
print('array3 type:', type(array3))
print('array3 array ํ˜•ํƒœ:', array3.shape)
  • ndarray ๋ฐ์ดํ„ฐ ํƒ€์ž…

ndarray๋‚ด์˜ ๋ฐ์ดํ„ฐ๊ฐ’์€ ์ˆซ์ž ๊ฐ’, ๋ฌธ์ž์—ด ๊ฐ’, ๋ถˆ ๊ฐ’ ๋ชจ๋‘ ๊ฐ€๋Šฅ
ndarray ๋‚ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ํŠน์„ฑ์ƒ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ๊ฐ€๋Šฅ
ํƒ€์ž… ๋ณ€ํ™˜์€ astype() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ฐ€๋Šฅ

  • reshape()

ndarray๋ฅผ ํŠน์ • ์ฐจ์› ๋ฐ ํฌ๊ธฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์–ด์ง„ ํ–‰/์—ด์— ๋งž์ถฐ์ง„ array๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‹จ, ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ Error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

#reshape
array1 = np.arange(10)
print('array1: \n', array1)

array2 = array1.reshape(2, 5)
print('array2: \n', array2)

array3 = array1.reshape(5, 2)
print('array3: \n', array3)

b. indexing

  • ํŠน์ • ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ

์›ํ•˜๋Š” ์œ„์น˜์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜

value = array1[2]
  • ์Šฌ๋ผ์ด์‹ฑ

์—ฐ์†๋œ ์ธ๋ฑ์Šค์ƒ์˜ ndarray๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹. ์‹œ์ž‘์ธ๋ฑ์Šค์—์„œ ์ข…๋ฃŒ ์ธ๋ฑ์Šค-1 ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ndarray๋ฅผ ๋ฐ˜ํ™˜

  • ํŒฌ์‹œ ์ธ๋ฑ์‹ฑ

์ผ์ •ํ•œ ์ธ๋ฑ์‹ฑ ์ง‘ํ•ฉ์„ ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ndarray ํ˜•ํƒœ๋กœ ์ง€์ •ํ•ด ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ndarray๋ฅผ ๋ฐ˜ํ™˜

#fancy indexing
array1d = np.arange(start=1, stop=10)
array2d = array1d.reshape(3,3)

array3 = array2d[[0,1], 2]
print('array2d[[0,1],2] => ', array3.tolist())

array4 = array2d[[0,1], 0:2]
print('array2d[[0,1], 0:2] => ', array4.tolist())

array3 = array2d[[0,1]]
print('array2d[[0,1]] => ', array5.tolist())
[Output]
array2d[[0,1], 2] => [3, 6]
array2d[[0,1], 0:2] => [[1, 2], [4, 5]]
array2d[[0,1], 2] => [[1, 2, 3], [4, 5, 6]]

-๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ

ํŠน์ • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์—ฌ๋ถ€์ธ True/False ๊ฐ’ ์ธ๋ฑ์‹ฑ ์ง‘ํ•ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ True์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ndarray๋ฅผ ๋ฐ˜ํ™˜

#boolean indexing
array1d = np.arange(start=1, stop=10)
# [ ] ์•ˆ์— array1d > 5 Boolean indexing์„ ์ ์šฉ
array3 = array1d[array1d > 5]
print('array1d > 5 ๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ ๊ฒฐ๊ณผ ๊ฐ’:', array3)
array1d > 5 ๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ ๊ฒฐ๊ณผ ๊ฐ’ : [6 7 8 9]

c. ํ–‰๋ ฌ์˜ ์ •๋ ฌ

  • np.sort( )

๋„˜ํŒŒ์ด์—์„œ sort( )๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹
์› ํ–‰๋ ฌ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ ์ฑ„ ์› ํ–‰๋ ฌ์˜ ์ •๋ ฌ๋œ ํ–‰๋ ฌ์„ ๋ฐ˜ํ™˜ (ndarry ์›๋ณธ ์œ ์ง€)

  • ndarray.sort( )

ํ–‰๋ ฌ ์ž์ฒด์—์„œ sort( )๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹
์› ํ–‰๋ ฌ ์ž์ฒด๋ฅผ ์ •๋ ฌํ•œ ์ƒํƒœ๋กœ ๋ณ€ํ™˜ (๋ฐ˜ํ™˜๊ฐ’ None/ ndarray ์›๋ณธ ๋Œ€์ฒด)

  • np.argsort( )

์ •๋ ฌ ํ–‰๋ ฌ์˜ ์›๋ณธ ํ–‰๋ ฌ ์ธ๋ฑ์Šค๋ฅผ ndarray ํ˜•์œผ๋กœ ๋ณ€ํ™˜

#argsort
org_array = np.array([3, 1, 9, 5])
sort_indices = np.argsort(org_array)
print(type(sort_indices))
print('ํ–‰๋ ฌ ์ •๋ ฌ ์‹œ ์›๋ณธ ํ–‰๋ ฌ์˜ ์ธ๋ฑ์Šค:', sort_indices)
<class 'numpy.ndarray'>
ํ–‰๋ ฌ ์ •๋ ฌ ์‹œ ์›๋ณธ ํ–‰๋ ฌ์˜ ์ธ๋ฑ์Šค : [1 0 3 2]

๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

[::-1]์„ ์ ์šฉ -> np.argsort(org_array)[::-1]

argsort()๋Š” ๋„˜ํŒŒ์ด์—์„œ ๋งค์šฐ ํ™œ์šฉ๋„๊ฐ€ ๋†’๋‹ค ๋ฐ˜ํ™˜๋œ ์ธ๋ฑ์Šค๋ฅผ ํŒฌ์‹œ ์ธ๋ฑ์Šค๋กœ ์ ์šฉํ•ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ ์ถ”์ถœ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

02. ํŒ๋‹ค์Šค ๐Ÿผ

ํŒ๋‹ค์Šค๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
ํŒ๋‹ค์Šค๋Š” ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ, ์ปฌ๋ ‰์…˜, ๋„˜ํŒŒ์ด ๋“ฑ์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ CSV ๋“ฑ์˜ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ DataFrame์œผ๋กœ ๋ณ€๊ฒฝํ•ด ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต/๋ถ„์„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆ˜ํ–‰

  • Pandas ํ•ต์‹ฌ ๊ฐœ์ฒด

DataFrame์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ–‰๊ณผ ์—ด๋กœ ์ด๋ค„์ง„ 2์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด

  • Series์™€ DataFrame

Series ์นผ๋Ÿผ์ด ํ•˜๋‚˜๋ฟ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด
DataFrame ์นผ๋Ÿผ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด (์—ฌ๋Ÿฌ ๊ฐœ์˜ Series)

a. ํŒ๋‹ค์Šค ์‹œ์ž‘, ํŒŒ์ผ์„ DataFrame๋กœ ๋กœ๋”ฉ

  • ํŒ๋‹ค์Šค ๋ชจ๋“ˆ ์ž„ํฌํŠธ
Import pandas pd
  • pd.read_csv( )

csv ํŒŒ์ผ ํฌ๋งท์„ ์œ„ํ•œ API
๋””ํดํŠธ ํ•„๋“œ ๊ตฌ๋ถ„ ๋ฌธ์ž : ,
Sep ์ธ์ž๋ฅผ ํ™œ์šฉ (sep='\t')

  • DataFrame.head( )

DataFrame ๋งจ ์•ž์— ์žˆ๋Š” N๊ฐœ row ๋ฐ˜ํ™˜ (default : 5)

  • DataFrame.info( )
    ์ด ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜์™€ ์นผ๋Ÿผ๋ณ„ ๋ฐ์ดํ„ฐ ํƒ€์ž…, null ๊ฑด์ˆ˜
titanic_df.info()
[Output]

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
  • DataFrame.describe( )

์ˆซ์žํ˜• ์นผ๋Ÿผ์— ๋Œ€ํ•œ ๊ฐœ๋žต์ ์ธ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๋„
(non-null ๊ฑด์ˆ˜, mean, std, min, max, quantile)

titanic_df.describe()

  • DataFrame[โ€˜์—ด].value_counts( )

ํ•ด๋‹น ์นผ๋Ÿผ๊ฐ’์˜ ์œ ํ˜•๊ณผ ๊ฑด์ˆ˜ ํ™•์ธ
๋งŽ์€ ๊ฑด์ˆ˜ ์ˆœ์„œ๋กœ ์ •๋ ฌ๋˜์–ด ๊ฐ’์„ ๋ฐ˜ํ™˜
ํ•ด๋‹น ์นผ๋Ÿผ์— ํ•ด๋‹น๋˜๋Š” Series ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ (๋”ฐ๋ผ์„œ type๊ฐ€ Series์ด๋‹ค)

value_counts = titanic_df['Pclass'].value_counts()

์ˆœ์ฐจ ๊ฐ’๊ณผ ๊ฐ™์€ ์˜๋ฏธ์—†๋Š” ์‹๋ณ„์ž๋งŒ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ณ ์œ ์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค๋ฉด ์˜๋ฏธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’ ํ• ๋‹น๋„ ๊ฐ€๋Šฅ (๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๊ณ ์œ ์„ฑ ๋ณด์žฅ)

b. DataFrame๊ณผ ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ, ๋„˜ํŒŒ์ด ndarray ์ƒํ˜ธ ๋ณ€ํ™˜

๊ธฐ๋ณธ์ ์œผ๋กœ ๋„˜ํŒŒ์ด ndarray๋ฅผ ์ž…๋ ฅ์ธ์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆ
DataFrame๊ณผ ๋„˜ํŒŒ์ด ndarray ์ƒํ˜ธ ๊ฐ„์˜ ๋ณ€ํ™˜์€ ๋งค์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒ

  • ๋„˜ํŒŒ์ด ndarray, ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ DataFrame์œผ๋กœ ๋ณ€ํ™˜

(1) ndarray -> DF

import numpy as np

col_name1 = ['col1']
list1= [1,2,3]
array1 = np.array(list1)
print('array1 shape: ', array1.shape)

#๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด DataFrame ์ƒ์„ฑ
df_list1= pd.DataFrame(list1, columns = col_name1)
print('1์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“  DataFrame:\n', df_list1)

#๋„˜ํŒŒ์ด ndarray๋ฅผ ์ด์šฉํ•ด DataFrame ์ƒ์„ฑ
df_array1 = pd.DataFrame(array1, columns = col_name1)
print('1์ฐจ์› ndarray๋กœ ๋งŒ๋“  DataFrame:\n', df_array1)

(2) list -> DF

#3๊ฐœ์˜ ์นผ๋Ÿผ๋ช…์ด ํ•„์š”ํ•จ
col_name2 = ['col1', 'col2', 'col3']

#2ํ–‰x3์—ด ํ˜•ํƒœ์˜ ๋ฆฌ์ŠคํŠธ์™€ ndarray ์ƒ์„ฑํ•œ ๋’ค ์ด๋ฅผ DataFrame๋กœ ๋ณ€ํ™˜
list2= [[1,2,3], 
       [11, 12, 13]]
array2= np.array(list2)
print('array2 shape:', array2.shape)
df_list2 = pd.DataFrame(list2, columns=col_name2)
print('2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“  DataFrame:\n', df_list2)
df_array2 = pd.DataFrame(array2, columns=col_name2)
print('2์ฐจ์› ndarray๋กœ ๋งŒ๋“  DataFrame:\n', df_array2)

(3) dictionary -> DF

#Key๋Š” ๋ฌธ์ž์—ด ์นผ๋Ÿผ๋ฉฐ์œผ๋กœ ๋งคํ•‘, Value๋Š” ๋ฆฌ์ŠคํŠธํ˜•(๋˜๋Š” ndarray) ์นผ๋Ÿผ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ 
dict= {'col1':[1,11], 'col2':[2,22], 'col3':[3,33]}
df_dict = pd.DataFrame(dict)
print('๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“  DataFrame:\n', df_dict)

c. DataFrame์˜ ์นผ๋Ÿผ ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ์„ฑ ์ˆ˜์ •

  • [ ] ์—ฐ์‚ฐ์ž ์ด์šฉ

DataFrame[โ€˜์—ดโ€˜] = ์ˆซ์ž
DataFrame[โ€˜์—ด'] = ์ˆ˜์‹

๊ธฐ์กด ์นผ๋Ÿผ๊ฐ’๋„ ์‰ฝ๊ฒŒ ์ผ๊ด„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Œ

titanic_df['Age_by_10'] = titanic_df['Age_by_10']+100

d. DataFrame ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • DataFrame.drop( )

Labels dropํ•  ์นผ๋Ÿผ์ด๋‚˜ ํ–‰ ์ง€์ • ([ ] ์•ˆ์— ๋„ฃ์–ด์„œ ์ž…๋ ฅ)
Axis ํŠน์ • ์นผ๋Ÿผ ๋˜๋Š” ํ–‰ drop (axis=0: row, axis=1: column)
inplace dropํ•œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์›๋ณธ์œผ๋กœ ์ €์žฅ (default: False)
inplace True ์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’ None/ ์›๋ณธ์ด ์ƒˆ๋กœ์šด DF๋กœ ๋Œ€์ฒด๋จ.

drop() ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” ์นผ๋Ÿผ์„ ๋“œ๋กญํ•˜๋Š” ๊ฒฝ์šฐ

e. Index ๊ฐ์ฒด

Index ๊ฐ์ฒด๋Š” ์‹๋ณ„์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ 1์ฐจ์› array๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • DataFrame.index

DataFrame์˜ ์ธ๋ฑ์Šค ๊ฐ์ฒด ์ถ”์ถœ

  • DataFrame.index.values

DataFrame์˜ ์ธ๋ฑ์Šค ๊ฐ์ฒด๋ฅผ ์‹ค์ œ ๊ฐ’ array๋กœ ๋ณ€ํ™˜
Index๋Š” ์—ฐ์‚ฐ์šฉ์ด ์•„๋‹Œ ์˜ค์ง ์‹๋ณ„์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉ

  • DataFrame.reset_index( )

DataFrame ์ธ๋ฑ์Šค๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์—ฐ์† ์ˆซ์žํ˜• (0~)์œผ๋กœ ํ• ๋‹น (๊ณ ์œ  ์ธ๋ฑ์Šค ์žƒ์–ด๋ฒ„๋ฆผ)
๊ธฐ์กด ์ธ๋ฑ์Šค โ€˜indexโ€™๋ผ๋Š” ์ƒˆ๋กœ์šด ์นผ๋Ÿผ๋ช…์œผ๋กœ ์ถ”๊ฐ€

drop ๊ธฐ๋ณธ ์ธ๋ฑ์Šค๋ฅผ ์ƒˆ๋กœ์šด ์นผ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์‚ญ์ œ (default = False)
inplace reset_indexํ•œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์›๋ณธ์œผ๋กœ ์ €์žฅ(default = False)

c. ๋ฐ์ดํ„ฐ ์…€๋ ‰์…˜ ๋ฐ ํ•„ํ„ฐ๋ง

  • [ ] ์—ฐ์‚ฐ์ž

DataFrame์˜ ์นผ๋Ÿผ๋งŒ ์ง€์ •ํ•˜๋Š” โ€˜์นผ๋Ÿผ ์ง€์ • ์—ฐ์‚ฐ์žโ€˜
[ ] ๋Š” ์นผ๋Ÿผ๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์นผ๋Ÿผ ์ง€์ • ์—ฐ์‚ฐ์ž๋กœ ์ดํ•ดํ•˜๊ธฐ

๋‹จ์ผ ์นผ๋Ÿผ ์ถ”์ถœ

titanic_df['Pclass']

์—ฌ๋Ÿฌ ์นผ๋Ÿผ ์ถ”์ถœ
[ ] ์•ˆ์— ํ•ด๋‹น ์นผ๋Ÿผ๋“ค์ด ํฌํ•จ๋œ [ ] ์ž…๋ ฅ

titanic_df[['Survived', 'Pclass']]

๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ ๊ฐ€๋Šฅ

titanic_df[titanic_df['Pclass']==3].

์Šฌ๋ผ์ด์‹ฑ ์—ฐ์‚ฐ์œผ๋กœ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ์ข‹์Œ

  • DataFrame.iloc[ ]

์œ„์น˜ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์‹ฑ
ํ–‰๊ณผ ์—ด ๊ฐ’์œผ๋กœ integer ํ˜น์€ integerํ˜•์˜ ์Šฌ๋ผ์ด์‹ฑ, ํŒฌ์‹œ ์ธ๋ฑ์‹ฑ๋งŒ ๊ฐ€๋Šฅ
์นผ๋Ÿผ ๋ช…์นญ์„ ์ž…๋ ฅํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ
๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ

Data_df.iloc[0, 0]
  • DataFrame.loc[ ]

๋ช…์นญ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค
loc[์ธ๋ฑ์Šค ๊ฐ’, ์นผ๋Ÿผ๋ช…] ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

data_df.log['one', 'Name']
  • ๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ

๋งค์šฐ ํŽธ๋ฆฌํ•œ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐฉ์‹์ด์ž ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹

[ ] ์—ฐ์‚ฐ์ž์™€ DataFrame.loc[ ] ์‚ฌ์šฉ
๋ณตํ•ฉ ์กฐ๊ฑด ๊ฒฐํ•ฉํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ (&, |, ~)
[ ] ์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ : DataFrame[[์กฐ๊ฑด][์—ด ์ด๋ฆ„๋“ค]]

titanic_df[titanic_df['Age'] > 60][['Nameโ€™, โ€˜Ageโ€™]]

.loc[ ]์˜ ๊ฒฝ์šฐ: DataFrame loc[[์กฐ๊ฑด], [์—ด ์ด๋ฆ„๋“ค]]

titanic_df.loc[titanic_df[โ€˜Ageโ€™] > 60, [โ€˜Nameโ€™, โ€˜Ageโ€™]]

d. ์ •๋ ฌ, Aggregation ํ•จ์ˆ˜, GroupBy ์ ์šฉ

  • DataFrame.sort_values( )

DataFrame๊ณผ Series ์ •๋ ฌ

by ์ •๋ ฌ์˜ ๊ธฐ์ค€์ด ๋  ์—ด(๋“ค)์„ ๋ฆฌ์ŠคํŠธํ˜•์œผ๋กœ ์ž…๋ ฅ
ascending ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ์—ฌ๋ถ€ (default: True)
inplace ์ •๋ ฌํ•œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์›๋ณธ์œผ๋กœ ์ €์žฅ (default : false)

titanic_sorted = titanic_df.sort_values(by=['Pclass', 'Name'], ascending=False)
  • Aggregation ํ•จ์ˆ˜

๊ธฐ๋ณธ ์—ฐ์‚ฐ์„ ๋„์™€์ฃผ๋Š” ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ (min, max, sum, median, count)
DataFrame ์ „์ฒด ํ˜น์€ ํŠน์ • ์นผ๋Ÿผ๋“ค์— ํ•ด๋‹น aggregation ์ ์šฉ

์ „์ฒด ์นผ๋Ÿผ๋“ค ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋’ค์— ํ•จ์ˆ˜ ์ ์šฉ

titanic_df.count()

ํŠน์ • ์นผ๋Ÿผ๋“ค ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„[[์นผ๋Ÿผ๋“ค]] ๋’ค์— ํ•จ์ˆ˜ ์ ์šฉ

titanic_df[[โ€˜Ageโ€™, โ€˜Fareโ€™]].mean( )

Axis ์„ค์ •์— ๋”ฐ๋ผ ์ ์šฉ๋˜๋Š” ๋ฐฉํ–ฅ ๋‹ฌ๋ผ์ง(axis =0: ํ–‰/ axis =1: ์—ด)

  • DataFrame.groupby( )

์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ by์— ์นผ๋Ÿผ์„ ์ž…๋ ฅํ•˜๋ฉด ๋Œ€์ƒ ์นผ๋Ÿผ์„ groupby
๋ฐ˜ํ™˜๋œ DataFrame Groupby ๊ฐ์ฒด์— aggregation ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ

groupby( ) ๋Œ€์ƒ ์นผ๋Ÿผ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์นผ๋Ÿผ์— ํ•ด๋‹น aggregation ํ•จ์ˆ˜ ์ ์šฉ

ํŠน์ • ์นผ๋Ÿผ๋“ค์—๋งŒ ์ ์šฉ
.groupby()[์—ด].ํ•จ์ˆ˜( ) , .groupby( )[[์—ด๋“ค]].ํ•จ์ˆ˜( )

.agg( ) ์„ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ aggregation ํ•จ์ˆ˜ ์ ์šฉ
ํ•˜๋‚˜์˜ ์นผ๋Ÿผ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•จ์ˆ˜: .agg([ํ•จ์ˆ˜๋“ค])

titanic_df.groupby('Pclass')['Age'].agg([max, min])

์นผ๋Ÿผ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜
.agg(dic())

agg_format = {'Age':'max', 'SibSp':'sum', 'Fare':'mean'}
titanic_df.groupby('Pclass').agg(agg_format)

e. ๊ฒฐ์† ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๊ฒฐ์† ๋ฐ์ดํ„ฐ๋Š” ์นผ๋Ÿผ์— ๊ฐ’์ด ์—†๋Š” NULL์ธ ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ๋„˜ํŒŒ์ด์˜ NaN์œผ๋กœ ํ‘œ์‹œ. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ NaN๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ

  • DataFrame.isna( )

๋ชจ๋“  ์นผ๋Ÿผ ๊ฐ’์ด NaN์ธ์ง€ ์•„๋‹Œ์ง€ true/false๋กœ ๋ฐ˜ํ™˜
๊ฒฐ์† ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DataFrame.isna( ).sum( )

  • DataFrame.fillna( )

๊ฒฐ์† ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ

ํŠน์ • ์นผ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ
DataFrame[์—ด].filllna() , DataFrame[[์—ด]].fillna( )

-> Inplace = True ํ˜น์€ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•ด์•ผ filna( ) ์‹คํ–‰ ๊ฐ’ ์ €์žฅ๋จ

f. lambda ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต

Apply lambda ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต
์ผ๊ด„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต์„ ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๋‚˜ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ apply lambda๋ฅผ ์ด์šฉ

  • Lambda

ํ•จ์ˆ˜์˜ ์„ ์–ธ๊ณผ ํ•จ์ˆ˜ ๋‚ด์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ์ค„๋กœ ๋ณ€ํ™˜ํ•œ ์‹

  • DataFrame.apply(lambda ์‹)

ํŠน์ • ์นผ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ

DataFrame[์—ด].apply( )  `DataFrame[[์—ด]].apply( )`

If else๋ฌธ list comprehension ์‚ฌ์šฉ
๋„ˆ๋ฌด ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ๋”ฐ๋กœ ํ•จ์ˆ˜ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•

lambda x : 'Child' if x <=15 else 'Adult

if์ ˆ์˜ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์‹๋ณด๋‹ค ๋จผ์ € ๋‚˜์˜ด

profile
for well-being we need nectar and ambrosia

0๊ฐœ์˜ ๋Œ“๊ธ€