[Python] pandas ํจ์
pandas ํจ์
- ์๋ฃ๊ตฌ์กฐ ๋ฐ ๋ฐ์ดํฐ ๋ถ์/์ฒ๋ฆฌ๋ฅผ ์ํ ํ์ด์ฌ ํจํค์ง
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์๋๋ ์๋ฃ ๊ตฌ์กฐ์ธ series์ data frame ์ฌ์ฉ
import pandas as pd
from pandas import Series, DataFrame
Sereis
- index์ value์ ํํ๋ฅผ ๊ฐ๊ณ ์๋ pandas ์๋ฃ ๊ตฌ์กฐ
- series๋ index์ value๋ก ๊ตฌ์ฑ๋๋ค๋ ์ ์์ value๋ง ๊ฐ๋ ๋ฆฌ์คํธ์ ๊ตฌ๋ถ๋จ
- index๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก 0,1,2,3... ์ผ๋ก ์๋ ์์ฑ
a=Series([1,3,5,7])
a.values # ๊ฐ
a.indext # ์ธ๋ฑ์ค
# indext ๋ณ๊ฒฝ
a2 = pd.Series([1,3,5,7], index=['a','b','c','d'])
DataFrame
- ์์
๊ณผ ๊ฐ์ด ์ซ์, ๋ฌธ์ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ํ์ ๋ด์ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ
- ๊ฐ ์ด์ ์๋ก ๋ค๋ฅธ ์๋ฃํ์ด ๋ ์ ์๊ณ ์ด ์ด๋ฆ, ํ ์ด๋ฆ์ ๊ฐ์ง
๋ฐ์ดํฐ ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
- csv ํ์ผ ๋ถ๋ฌ์ค๊ธฐ : pd.read_csv( 'ํ์ผ๋ช
' )
- excel ํ์ผ ๋ถ๋ฌ์ค๊ธฐ : pd.read.exel( 'ํ์ผ๋ช
' )
- ํ๊ธ์ด ํฌํจ๋ ํ์ผ ( 'ํ์ผ๋ช
', enconding='euc-kr' )
DataFrame ํ์ธํ๊ธฐ
โ ์ฒ์๋ถํฐ ~ ๊ฐ์ ํ๋ง ๋ถ๋ฌ์ค๊ธฐ
๋ณ์๋ช
.head( ๋ถ๋ฌ์ฌ ํ ๊ฐ์ ) ๊ธฐ๋ณธ๊ฐ = 5
โ ๋ง์ง๋ง์์ ~ ๊ฐ์ ํ๋ง ๋ถ๋ฌ์ค๊ธฐ
๋ณ์๋ช
.tail( ๋ถ๋ฌ์ฌ ํ ๊ฐ์ ) ๊ธฐ๋ณธ๊ฐ = 5
โ ์ฐ์์ ์ธ ํ ๋ถ๋ฌ์ค๊ธฐ ( ~์์ ~๊น์ง ํ ์ถ๋ ฅ)
๋ณ์๋ช
[ ์ฒ์ ์ถ๋ ฅํ ํ : ๋ง์ง๋ง์ผ๋ก ์ถ๋ ฅํ ํ + 1 ]
โ ํน์ ์ด ๋ถ๋ฌ์ค๊ธฐ
๋ณ์[[ 'ํ ์ด๋ฆ' ]]
๋ณ์๋ช
[ ๋ณ์๋ช
.columns [[ ํ ๋ฒํธ ]] ]
๋ณ์๋ช
.loc[ : , '์ฒซ ์ด๋ช
' : '๋ ์ด๋ช
' ]
df['amount'] ๋๋ df.amount
# amount๋ง ์ถ๋ ฅ
df[df.columns[[1,3,10]]]
# 1,3,10ํ ์ถ๋ ฅ
df.loc[ :, 'decision':'location']
# decision๋ถํฐ location๊น์ง ์ถ๋ ฅ
โ ํน์ ํ, ์ด ๋ถ๋ฌ์ค๊ธฐ
๋ณ์.iloc[ ์ฒซ ํ : ๋ ํ, ์ฒซ ์ด : ๋ ์ด ]
๋ณ์๋ช
.at[ ํ ๋ฒํธ, '์ด ์ด๋ฆ' ] ~๋ฒ์งธ์ ' ' ๊ฐ
df.iloc[1:7, 0:2]
# 1~6ํ, 0~1์ด ๋ถ๋ฌ์ค๊ธฐ
df.at[5, 'amount']
# 5๋ฒ์งธ ํ์ amount ๊ฐ
DataFrame ๋ณํํ๊ธฐ
โ ๋ณต์ฌ, ์ถ๊ฐ, ์ญ์ , ์์
insert ์ถ๊ฐ, del ์ญ์ , rename ์ด๋ฆ ์ฌ์ค์ ํจ์๋ฅผ ํตํด ์ถ๊ฐ, ์ญ์ , ์์ ๊ฐ๋ฅ
df_columns = df.copy()
# ๋ฐ์ดํฐ ํ๋ ์ ํ ๋ณต์ฌ
df_columns.columns
# ๋ฐ์ดํฐ ํ๋ ์์ ํ ํ์ธ
โ ์ด ์ด๋ฆ ์์
df_columns.rename(columns={ '์๋ ํ' : '๋ฐ๊ฟ ํ' }, inplace=True)
df_columns.rename(columns={'job' : 'occupation'}, inplace=true)
# job์ occupation์ผ๋ก ์์
โ ์ด ์ถ๊ฐ(๋ณ์ ๊ณ์ฐ)
df['tex-inclued price']=df['amount']*1.1
# amount์ 1.1 ๊ณฑํ์ฌ ์๋ก์ด ํ ์ถ๊ฐ
df.insert(8, 'total price', df['amount']*12)
# 8๋ฒ์งธ ํ์ ์๋ก์ด ํ ์ถ๊ฐ(total price)
โ ์ด ์ญ์
del ๋ฐ์ดํฐ์
[ '๋ณ์๋ช
' ]
del df['total price']
โ ํน์ ์ง๋จ ๋ฐ์ดํฐ๋ง ์ถ์ถ
๋ฐ์ดํฐ์
[( ๋ฐ์ดํฐ์
[ '๋ณ์๋ช
' ] = )]
df_gender = df[(df['gender']=1)]
# ์ฑ๋ณ ์ค ๋จ์ฑ(1)๋ง ์ถ์ถํ์ฌ ๋ณ๋ ๋ฐ์ดํฐํ๋ ์ ๋ง๋ค๊ธฐ
โ ๊ธฐ์ค๊ฐ ์ด์ ํน์ ์ดํ ๋ฐ์ดํฐ๋ง ์ถ์ถ
df_reacount=df[(df['count']<10) & (df['count']>=1)]
# ์ฐ ๊ตฌ๋งคํ์ 1~9ํ ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ง ์ถ์ถํ์ฌ ๋ฐ์ดํฐํ๋ ์ ๋ง๋ค๊ธฐ
์ฝ๋ฉ๋ณ๊ฒฝ
- ๊ธฐ์กด์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ ์๋ก์ด ๊ธฐ์ค์ผ๋ก ๋ง๋ฆ
- ์ฌ๋ฒ์ฃผํํ์ฌ ๋ณ์ ๋ง๋ค๊ธฐ
โ ๋ฒ์ฃผ ๋น๋ ํ์ธ
๋ฐ์ดํฐ์
[ '๋ณ์๋ช
' ].value_counts(sort=False)
df['edu'].value_counts(sort=False)
โ ์ฌ๋ฒ์ฃผ ๊ธฐ์ค ํจ์ ์ ์
def ์์์ ๋ณ์๋ช
( ) :
if ์กฐ๊ฑด :
return 1
elif ์กฐ๊ฑด :
return 2
elif ์กฐ๊ฑด :
return3
def edu_groups(Series):
if series == 2 :
return 1
elif series == 3 or series == 4 :
return 2
elif series >= 5 :
return 3
์ ํตํ๋งค๋ฐ์ดํฐ๋ถ์ ๊ฐ์์๋ฃ ์ฐธ์กฐ