[Python] pandas ํ•จ์ˆ˜

2022. 4. 21. 09:00

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



์œ ํ†ตํŒ๋งค๋ฐ์ดํ„ฐ๋ถ„์„ ๊ฐ•์˜์ž๋ฃŒ ์ฐธ์กฐ

๋ฐ˜์‘ํ˜•

BELATED ARTICLES

more