Pandas ์ฌ์ฉ๋ฒ - ํจ์์ ์ฉ, ๊ทธ๋ฃนํ [๊ธฐ๋ณธ]
ํจ์ ์ ์ฉ
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 = '์ง์๋ฒํธ'
๊ธฐ์กด dataframe์ ํ์ฉํ์ฌ ํจ์๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
df['ํ๊ต'] = df['ํ๊ต'] + '๋ฑํ๊ต'
๊ธฐ์กด์ ๊ฐ data์ 'ํ๊ต'์ +'๋ฑํ๊ต'๋ฅผ ํ๋ฉด์ '~~๊ณ ๋ฑํ๊ต' ํํ๋ก ๋ณ๊ฒฝํ์๋ค. ๊ทธ๋ผ 'ํค' column์ cm๋ฅผ ๋ถ์ฌ '~~~cm'์ ๋ง๋ค์ด ๋ณด์
df['ํค'] = df['ํค'] + 'cm' #์ค๋ฅ ๋ฐ์!
์ด๋๋ก ์คํํ๊ฒ ๋๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. 'ํค'๋ int์ด๊ธฐ ๋๋ฌธ์ int ์ str์ ํฉ์น๋ ค๋ฉด intํ์ str๋ก ์ ์ฉํด์ค์ผํ๋ค.
ํจ์๋ฅผ ์ ์ฉํ์ฌ ๋ฐ๊ฟ๋ณด์. DataFrame์ apply๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ํจ์๋ฅผ ์ ์ฉํ ์ ์๋ค.
def add_cm(height):
return str(height) + 'cm'
df['ํค'] = df['ํค'].apply(add_cm) #ํค ๋ฐ์ดํฐ์ ๋ํด์ add_cm ํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์
๋ค๋ฅธ ํจ์๋ ์ ์ฉํด๋ณด์! SWํน๊ธฐ์ ์ฒซ ์ํ๋ฒณ์ ๋๋ฌธ์๋ก ํํํด๋ณด์.
def capitalize(lang):
if pd.notnull(lang): #NaN์ด ์๋์ง
return lang.capitalize()
return lang
df['SWํน๊ธฐ'] = df['SWํน๊ธฐ'].apply(capitalize)
df
ํ์ง๋ง capitalize๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
df['SWํน๊ธฐ'].str.capitalize()
๊ทธ๋ฃนํ
๊ทธ๋ฃนํ๋ ๋์ผํ ๊ฐ์ ๊ฐ์ง๋ ๊ฒ๋ค๋ผ๋ฆฌ ํฉ์ณ์ ํต๊ณ ๋๋ ํ๊ท ๋ฑ์ ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. groupby ๋ฉ์๋๋ฅผ ํตํด ์ฌ์ฉํ ์ ์๋ค.
๊ตฌ์ฑํ๋ DataFrame์์ 'ํ๊ต'๋ฅผ ๊ทธ๋ฃน๋ณ๋ก ๋ฌถ๋๋ค๋ฉด '๋ถ์ฐ๊ณ '์ '๋ฅ๋จ๊ณ '๋ก ๋ฌถ์ ์ ์๋ค.
df.groupby('ํ๊ต')
df.groupby('ํ๊ต').get_group('๋ถ์ฐ๊ณ ')
df.groupby('ํ๊ต').get_group('๋ฅ๋จ๊ณ ')
์ฌ๊ธฐ์ groupby์ mean ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ์ฐ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ค์ ํ๊ท ๊ฐ์ ๋ณด์ฌ์ค๋ค.
df.groupby('ํ๊ต').mean() #๊ณ์ฐ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ค์ ํ๊ท ๊ฐ
>>> df.groupby('ํ๊ต').size() #๊ฐ ๊ทธ๋ฃน์ ํฌ๊ธฐ
ํ๊ต
๋ฅ๋จ๊ณ 3
๋ถ์ฐ๊ณ 5
dtype: int64
>>> df.groupby('ํ๊ต').size()['๋ฅ๋จ๊ณ '] #ํ๊ต๋ก ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค์ ๋ฅ๋จ๊ณ ์ ํด๋นํ๋ ๋ฐ์ดํฐ์ ์
3
>>> df.groupby('ํ๊ต')['ํค'].mean() # ํ๊ต๋ก ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค์ ํค์ ํ๊ท ๋ฐ์ดํฐ
ํ๊ต
๋ฅ๋จ๊ณ 193.333333
๋ถ์ฐ๊ณ 184.800000
Name: ํค, dtype: float64
>>> df.groupby('ํ๊ต')[['๊ตญ์ด','์์ด','์ํ']].mean() #ํ๊ต๋ก ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค์ ๊ตญ์ด, ์์ด, ์ํ ํ๊ท ๋ฐ์ดํฐ
์ด๋ฒ์ ํ๋ ์ด์ ์ถ๊ฐํด๋ณด์.
df['ํ๋
'] = [3,3,2,1,1,3,2,2] #ํ๋
column ์ถ๊ฐ
df
์ด๋ฅผ ๊ทธ๋ฃนํ ํ ๊ป๋ฐ, ํ๊ต๋ณ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ์ํด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค.
df.groupby(['ํ๊ต','ํ๋
']).mean() #ํ๊ต๋ณ, ํ๋
๋ณ ํ๊ท ๋ฐ์ดํฐ
>>> df.groupby('ํ๋
').mean() #ํ๋
๋ณ ํ๊ท ๋ฐ์ดํฐ
>>> df.groupby('ํ๋
').mean().sort_values('ํค') #ํ๋
๋ณ ํ๊ท ์ ๋ด๊ณ ํค๋ก ์ ๋ ฌํ๋ค.
>>> df.groupby('ํ๊ต')[['์ด๋ฆ','SWํน๊ธฐ']].count() #ํ๊ต๋ก ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค์ ๊ฐ ํ๊ต๋ณ SWํน๊ธฐ ๋ฐ์ดํฐ์ ์๋ฅผ ๊ฐ์ ธ์ด
ํ๊ต ์ด๋ฆ SWํน๊ธฐ
๋ฅ๋จ๊ณ 3 3
๋ถ์ฐ๊ณ 5 3
๊ทธ๋ฃนํ๋ฅผ ์งํํ๋ฉด ์๊ธฐ๊ฐ ์ํ๋ ๊ทธ๋ฃน๋ณ ๋ฐ์ดํฐ๋ฅผ ํ์ธ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ ์ ์ด ๋ง๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋๋ ํ์ธํด๋ณด์.
>>> school = df.groupby('ํ๊ต')
>>> school['ํ๋
'].value_counts().loc['๋ถ์ฐ๊ณ '] #ํ๊ต๋ก ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค์ ๋ถ์ฐ๊ณ ์ ๋ํด์ ํ๋
๋
ํ์์๋ฅผ ๊ฐ์ ธ์ด
ํ๋
1 2
3 2
2 1
Name: ํ๋
, dtype: int64
>>> school['ํ๋
'].value_counts().loc['๋ฅ๋จ๊ณ '] #ํ๊ต๋ก ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค์ ๋ฅ๋จ๊ณ ์ ๋ํด์ ํ๋
๋ณ ํ์์๋ฅผ ๊ฐ์ ธ์ด
ํ๋
2 2
3 1
Name: ํ๋
, dtype: int64
>>> school['ํ๋
'].value_counts(normalize=True).loc['๋ถ์ฐ๊ณ '] #ํ์๋ค์ ์ ๋ฐ์ดํฐ๋ฅผ ํผ์ผํธ๋ก ๋น๊ตํ์ฌ ๊ฐ์ ธ์ด
ํ๋
1 0.4
3 0.4
2 0.2
Name: ํ๋
, dtype: float64