๊ฒฐ์ธก์น ์ฒ๋ฆฌ
๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ฉด ์ ์์ ์ธ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ์๊ธฐ๋ ํ์ง๋ง ์ค๊ฐ์ค๊ฐ ๋น์ด์๊ฑฐ๋ ์ด์ํ ๊ฐ์ด ์ ๋ ฅ๋์ด ์์์๋ ์๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ๋์๋ ๊ฒฐ์ธก์น๋ฅผ ์ฒ๋ฆฌํด ์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ช๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณด์.
data = {
'์ด๋ฆ' : ['์ฑ์น์', '์ ๋๋ง', '์กํ์ญ', '์ํ์
', '๊ฐ๋ฐฑํธ', '๋ณ๋๊ท', 'ํฉํ์ฐ', '์ค๋ํ'],
'ํ๊ต' : ['๋ถ์ฐ๊ณ ', '๋ถ์ฐ๊ณ ', '๋ถ์ฐ๊ณ ', '๋ถ์ฐ๊ณ ', '๋ถ์ฐ๊ณ ', '๋ฅ๋จ๊ณ ', '๋ฅ๋จ๊ณ ', '๋ฅ๋จ๊ณ '],
'ํค' : [197, 184, 168, 187, 188, 202, 188, 190],
'๊ตญ์ด' : [90, 40, 80, 40, 15, 80, 55, 100],
'์์ด' : [85, 35, 75, 60, 20, 100, 65, 85],
'์ํ' : [100, 50, 70, 70, 10, 95, 45, 90],
'๊ณผํ' : [95, 55, 80, 75, 35, 85, 40, 95],
'์ฌํ' : [85, 25, 75, 80, 10, 80, 35, 95],
'SWํน๊ธฐ' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}
df = pd.DataFrame(data,index =['1๋ฒ','2๋ฒ','3๋ฒ','4๋ฒ','5๋ฒ','6๋ฒ','7๋ฒ','8๋ฒ'])
df.index.name = '์ง์๋ฒํธ'
'SW ํน๊ธฐ'์ด์ ๋ณด๋ฉด NaN๊ฐ์ด ์ ๋ ฅ๋ ๊ณณ์ ํ์ธํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ๋ ์๋ฌด ๊ฐ๋ ์ ๋ ฅํ์ง ์์ NaN๊ฐ์ผ๋ก ๋ํ๋ฌ๋ค. ํ์ง๋ง ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค์ NaN ๋ง๊ณ ๋ ๋ค์ํ๊ฒ ๊ฒฐ์ธก์น๋ฅผ ํํํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ํ์ธํ๊ณ ๊ฒฐ์ธก์น ์ฒ๋ฆฌ๋ฅผ ์งํํด์ผ ํ๋ค.
fillna
๊ฒฐ์ธก ๋ฐ์ดํฐ๋ฅผ ์์ฝ๊ฒ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์๋ fillna ๋ฉ์๋๊ฐ ์๋ค.
#๋ฐ์ดํฐ ์ฑ์ฐ๊ธฐ
df.fillna('')
#๋ฐ์ดํฐ๋ฅผ '์์'์ผ๋ก ์ฑ์ฐ๊ธฐ
df.fillna('์์')
fillna๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ๊ฒฐ์ธก์น๋ฅผ ์๊ธฐ๊ฐ ์ํ๋๋๋ก ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ํ fillna๋ ๋ชจ๋ DataFrame์ ์ ์ฉ๋๋ค.
์์๋ก 'ํ๊ต'์ด์ NaN๊ฐ์ผ๋ก ๋ง๋ค์ด๋ณด์.
import numpy as np
df['ํ๊ต'] = np.nan
df
df.fillna('๋ชจ๋ฆ') #inplace๋ฅผ True๋ก ํด์ผ ์๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋จ
fillna๋ก ๋ชจ๋ NaN๊ฐ์ '๋ชจ๋ฆ'์ ์ ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์๋ ๋ฐ์ดํฐ์ ์ ์ฉ์ํค๋ ค๋ฉด inplace ์ต์ ์ True๋ก ํด์ค์ผ ํ๋ค.
๋ฐ์ดํฐ ์ ์ธํ๊ธฐ (dropna)
๊ฒฐ์ธก์น์ ๋ค๋ฅธ ๊ฐ์ ๋์ ํ ์ ๋ ์์ง๋ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ์ ์๊ฐ ์ ์ด์ง๊ธฐ ๋๋ฌธ์, ํ์ต์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์๊ฐ ์๋ค๋ฉด ์์ฌ์ด ๋ฐฉ๋ฒ์ผ ์ ์๋ค.
df.dropna() #NaN์ ํฌํจํ๋ ๋ฐ์ดํฐ ์ญ์ , inplaceํ๋ฉด ์ ์ฉ
NaN ๊ฐ์ ๊ฐ์ง๋ 4๋ฒ, 5๋ฒ ์ด์ด ์ฌ๋ผ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ํ NaN๊ฐ์ ํฌํจํ๋ ํ์ ์ญ์ ํ ๊ฒ์ธ์ง, ์ด์ ์ญ์ ํ ๊ฒ์ธ์ง ์ ํํ ์ ์์ผ๋ฉฐ, ์ญ์ ์กฐ๊ฑด๋ ์ถ๊ฐํ ์ ์๋ค.
#axis = index or columns
#how = any or all -> any๋ฉด ๋ฐ์ดํฐ์ค ํ๋๋ง NaN์ด์ด๋ ์ญ์ , all์ด๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ NaN์ด์ด์ผ ์ญ์
df.dropna(axis='index',how='any')
df.dropna(axis='columns')
๋ฐ์ดํฐ ์ ๋ ฌ
๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๋ ๊ธฐ์ค์ ์ํด ์ ๋ ฌํด์ผํ๋ ์ผ์ด ์๊ธด๋ค. ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฌํ๋ ๋ฒ์ ์์๋ณด์.
df.sort_values('ํค',ascending=False) #ํค ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
sort_values๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด DataFrame์ ์ฝ๊ฒ ์ ๋ ฌํ ์ ์๋ค. ํ์ง๋ง ํ๊ฐ์ง ๊ธฐ์ค์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊ณ ์ถ์ ๋๋ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ฌ ์ ๋ ฅํ๋ฉด ๋๋ค.
df.sort_values(['์ํ','์์ด'],ascending=False) #์ํ 1์์, ์์ด 2์์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
์๋ฅผ ๋ณด๋ฉด ์ํ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒ์ด๋ค. 3๋ฒํ์๊ณผ 4๋ฒํ์์ ์ํ์ ์๊ฐ ๋๊ฐ์ ๋๋ ์์ด์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค.
ํ๊ฐ์ Column๋ง ๋ฝ์์ ์ ๋ ฌํ๊ฑฐ๋, index๋ฅผ ํ์ฉํ์ฌ ์ ๋ ฌํ ์๋ ์๋ค.
>>> df['ํค'].sort_values()
์ง์๋ฒํธ
3๋ฒ 168
2๋ฒ 184
4๋ฒ 187
5๋ฒ 188
7๋ฒ 188
8๋ฒ 190
1๋ฒ 197
6๋ฒ 202
Name: ํค, dtype: int64
>>> df.sort_index()
๋ฐ์ดํฐ ์์
๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ณ ์ง์ ์์ ํ ์๋ ์๋ค. ๋จผ์ dictํ์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ก ๋ฐ๊ฟ ์ ์๋ค.
>>> #columns ์์
>>> df['ํ๊ต'].replace({'๋ถ์ฐ๊ณ ':'์๋ถ๊ณ ','๋ฅ๋จ๊ณ ':'๊ตฐํฌ๊ณ '}) #๋ถ์ฐ๊ณ ๋ฅผ ์๋ถ๊ณ ๋ก ๋ฐ๊พผ๋ค. , ๋ฅ๋จ๊ณ ๋ ๊ตฐํฌ๊ณ ๋ก ๋ฐ๊พผ๋ค. ๋ฐ๊พธ๋ ค๋ฉด inplace
์ง์๋ฒํธ
1๋ฒ ์๋ถ๊ณ
2๋ฒ ์๋ถ๊ณ
3๋ฒ ์๋ถ๊ณ
4๋ฒ ์๋ถ๊ณ
5๋ฒ ์๋ถ๊ณ
6๋ฒ ๊ตฐํฌ๊ณ
7๋ฒ ๊ตฐํฌ๊ณ
8๋ฒ ๊ตฐํฌ๊ณ
Name: ํ๊ต, dtype: object
๋ง์ฐฌ๊ฐ์ง๋ก inplace๋ฅผ True๋ก ํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์ ์ฉ๋๋ค.
df1 = df
df1['ํ๊ต'].replace({'๋ถ์ฐ๊ณ ':'์ฑ๋ถ๊ณ '},inplace=True)
df1
str์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด์ ์์ ํ ์ ์๋ ์ฌ๋ฌ ๋ฉ์๋๊ฐ ์ ๊ณต๋๋ค.
df['SWํน๊ธฐ'] = df['SWํน๊ธฐ'].str.lower()
df
df['SWํน๊ธฐ'] = df['SWํน๊ธฐ'].str.upper()
df
๋ํ ์ผ๋ฐ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์๋ค.
df['ํ๊ต'] = df['ํ๊ต'] + '๋ฑํ๊ต'
df
Column ์ถ๊ฐ ๋ฐ ์ญ์
์์ ์ด ์ํ๋ ์ด์ ์ถ๊ฐ๋ก ์์ฑํ๊ณ ์ถ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ํํ๋ฉด ๋๋ค.
df['์ดํฉ'] = df['๊ตญ์ด']+df['์์ด']+df['์ํ']+df['๊ณผํ']+df['์ฌํ']
df['๊ฒฐ๊ณผ']= 'Fail' #์ปฌ๋ผ ์ถ๊ฐ ํ ๋ฐ์ดํฐ Fail๋ก ์ด๊ธฐํ
df
๊ฒฐ๊ณผ๋ฅผ Fail๋ก ์ด๊ธฐํ ํ ํ ์ด ํฉ์ด 400์ ์ด์์ธ ์ฌ๋๋ง Pass๋ก ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
df.loc[df['์ดํฉ']>400, '๊ฒฐ๊ณผ'] = 'Pass' #์ดํฉ์ด 400๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ๋ํด์ ๊ฒฐ๊ณผ๋ฅผ pass๋ก ์
๋ฐ์ดํธ
df
์ดํฉ ์ ์๋ฅผ ์ฌ์ฉํ์ผ๋ ์ด์ ๋ค์ ์ดํฉ์ ์ญ์ ํด๋ณด์.
df.drop(columns='์ดํฉ') #์ดํฉ ์ด ์ญ์
drop ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ column ์ต์ ์ ์ดํฉ์ ์ง์ด๋ฃ์ผ๋ฉด ์ด์ด ์ญ์ ๋๋ค.
ํ๊ฐ์ ์ด์ด ์๋๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ํ๋ฒ์ dropํ๊ณ ์ถ๋ค๋ฉด columns์ listํํ๋ก ์ด์ ์ด๋ฆ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
df.drop(columns=['๊ตญ์ด','์์ด','์ํ'])
Row ์ถ๊ฐ ๋ฐ ์ญ์
row๋ฅผ ์ถ๊ฐํด๋ณด์. ์์ ๋ฐฐ์ด loc์ iloc๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํ์ ์ถ๊ฐํ ์ ์๋ค.
df.loc['9๋ฒ']= ['์ด์ ํ','ํด๋จ๊ณ ๋ฑํ๊ต','184','90','90','90','90','90','Kotlin',450,'Pass'] #์๋ก์ด row์ถ๊ฐ
df
row๋ฅผ ์ญ์ ํ ๋์๋ drop์ ๋์ผํ๊ฒ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์ ์ต์ ์ ์ด์ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
df.drop(index = '4๋ฒ') # 4๋ฒ ํ์ ๋ฐ์ดํฐ row๋ฅผ ์ญ์
์์ ๊ฐ์ด index์ ์ญ์ ํ๊ณ ์ถ์ index๋ช ์ ์ ๋ ฅํ๋ฉด ๋๋ค. ์กฐ๊ฑด์ ํด๋น๋๋ ํ์ ๋ชจ๋ ์ญ์ ํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
filt = df['์ํ']<80
df[filt].index
df.drop(index = df[filt].index)
์๋ฅผ ๋ค์ด ์ํ์ ์๊ฐ 80์ ๋ฏธ๋ง์ธ ์ฌ๋์ ๊ฑธ๋ฌ๋ด๋๋ฐ ์กฐ๊ฑด์ ํด๋น๋๋ ์ธ๋ฑ์ค๋ฅผ ์ถ์ถํ ๋ค์ drop์ ์ง์ด๋ฃ์ผ๋ฉด ๋๋ค.
Cell ์์
๊ฐ๊ฐ์ Cell์ ํ๋์ฉ ์์ ํ ์๋ ์๋ค.
df.loc['4๋ฒ','SWํน๊ธฐ'] = 'Python'
df
df.loc['5๋ฒ',['ํ๊ต','SWํน๊ธฐ']] = ['๋ฅ๋จ๊ณ ๋ฑํ๊ต','C']
df
Column ์์ ๋ณ๊ฒฝ ๋ฐ ์ด๋ฆ ๋ณ๊ฒฝ
DataFrame์ column์ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. ๋จผ์ column์ ์ถ๋ ฅํด๋ณด์
>>> cols = list(df.columns)
['์ด๋ฆ', 'ํ๊ต', 'ํค', '๊ตญ์ด', '์์ด', '์ํ', '๊ณผํ', '์ฌํ', 'SWํน๊ธฐ', '์ดํฉ', '๊ฒฐ๊ณผ']
๋งจ ๋์ ์๋ ๊ฒฐ๊ณผ๋ฅผ 1์ด์๊ฐ์ ธ์ค๊ณ , ๋๋จธ์ง column์ ๋ค์ ๋ฐฐ์นํด๋ณด์.
df = df[[cols[-1]] + cols[0:-1]] #๋งจ ๋ค์ ์๋ ๊ฒฐ๊ณผ Column์ ์์ผ๋ก ๊ฐ์ ธ์ค๊ณ , ๋๋จธ์ง Column๋ค๊ณผ ํฉ์ณ์ ์์ ๋ณ๊ฒฝ
df
์์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ๋์๋ค. ์ฌ๊ธฐ์ ์ฒซ 3์ด๋ง ์ถ์ถํด์ ์ด๋ฆ์ ๋ณ๊ฒฝํด๋ณด์.
df = df[['๊ฒฐ๊ณผ','์ด๋ฆ','ํ๊ต']]
df
column์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ์คํธ ํํ๋ก ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
df.columns = ['Result','Name','School']
df
'Data analysis > ๋ฐ์ดํฐ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Pandas ์ฌ์ฉ๋ฒ - ํจ์์ ์ฉ, ๊ทธ๋ฃนํ [๊ธฐ๋ณธ] (0) | 2022.01.22 |
---|---|
Pandas ์ฌ์ฉ๋ฒ - ๋ฐ์ดํฐ ์ ํ ๋ฐฉ๋ฒ (iloc, loc, ์กฐ๊ฑด ์ค์ ) [๊ธฐ๋ณธ] (0) | 2022.01.18 |
Pandas ์ฌ์ฉ๋ฒ - ๋ฐ์ดํฐ์์ ์ ๋ณด ํ์ธํ๊ธฐ [๊ธฐ๋ณธ] (0) | 2022.01.17 |
Pandas ์ฌ์ฉ๋ฒ - ํ์ผ ์ ์ฅ ๋ฐ ์ด๊ธฐ [๊ธฐ๋ณธ] (0) | 2022.01.15 |
Pandas ์ฌ์ฉ๋ฒ - Series์ DataFrame [๊ธฐ๋ณธ] (0) | 2022.01.15 |