๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Python

[Dacon] Pandas ํŠœํ† ๋ฆฌ์–ผ

by hong- 2022. 1. 29.

#1 ๋ฐ์ดํ„ฐ

(1) ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ

: ์‚ฌ์ง„, ํ…์ŠคํŠธ, ์†Œ๋ฆฌ์™€ ๊ฐ™์ด ์ •ํ•ด์ง„ ํ˜•ํƒœ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ง€์นญ

(2) ์ •ํ˜• ๋ฐ์ดํ„ฐ

: ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ‘œ์— ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ง€์นญ

: CSV ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ

: ํ–‰์€ ์ค„๋ฐ”๊ฟˆ์„ ์ด์šฉํ•˜๊ณ  ์—ด์€ ์‰ผํ‘œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ๋ถ„

: ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๊ธฐ์— CSV๋Š” ๋ฉ”๋ชจ์žฅ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

 


#2 ํŒ๋‹ค์Šค

- ํŒ๋‹ค์Šค๋Š” ์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€

- ํŒ๋‹ค์Šค๋Š” ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ ํŒจํ‚ค์ง€

- ํŒ๋‹ค์Šค๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„์•ผ ํ•จ

import pandas as pd

#3 CSV ํŒŒ์ผ

- ๋ฐ์ดํ„ฐ๋ฅผ ์‰ผํ‘œ๋กœ๊ตฌ๋ถ„ํ•˜๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ํ™•์žฅ์ž๋Š” .csv

- ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ

- ์ •ํ˜• ๋ฐ์ดํ„ฐ์˜ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ํŒŒ์ผ ํ˜•์‹

 

(1) head(n) : ์ƒ์œ„ n๊ฐœ์˜ ๋กœ์šฐ ์ถœ๋ ฅ

(2) tail(n) : ํ•˜์œ„ n๊ฐœ์˜ ๋กœ์šฐ ์ถœ๋ ฅ

(3) pd.DataFrame.info() : Dataframe์˜ ์š”์•ฝ๋œ ์ •๋ณด ์ถœ๋ ฅ

(4) DataFrame[’์ปฌ๋Ÿผ’] or DataFrame.์ปฌ๋Ÿผ : ํŠน์ • ์ปฌ๋Ÿผ ์„ ํƒ

 


#4 ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ

(1) ๋„์‹œ์™€ ์ธ๊ตฌ์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด dataframe ๋งŒ๋“ค๊ธฐ

city = ['์„œ์šธ','๋ถ€์‚ฐ','๋Œ€๊ตฌ','์ธ์ฒœ','๋Œ€์ „','๊ด‘์ฃผ','์ˆ˜์›','์šธ์‚ฐ','๊ณ ์–‘','์šฉ์ธ']
population = [12312, 123123, 32434, 25345, 34543, 7676,25423, 24545, 34454,44332]

(2)  ๋น„์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ

- pd.DataFrame() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑ

- ๋ณ€์ˆ˜๋กœ๋Š” data, columns, index ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

# ๋นˆ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ ๋งŒ๋“ค๊ธฐ

data=pd.DataFrame(columns=['๋„์‹œ','์ธ๊ตฌ์ˆ˜'], index=range(10)) data

# ๋นˆ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

data['๋„์‹œ']=city data.์ธ๊ตฌ์ˆ˜ = population data

# ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ

data_dict = {'๋„์‹œ':city, '์ธ๊ตฌ์ˆ˜':population} data = pd.DataFrame(data_dict) data

#5 ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ €์žฅ

pd.DataFrame.to_csv() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ csv๋กœ ์ €์žฅํ•จ

pd.DataFrame.to_csv('์ €์žฅ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช….csv')

- index๊ฐ€ True์ด๋ฉด DataFrame์˜ ์ธ๋ฑ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€๋จ

- header๊ฐ€ False๋ฉด ์ปฌ๋Ÿผ๋ช…์„ ์ œ์™ธํ•˜๊ณ  ์ €์žฅ


#6 ์ปฌ๋Ÿผ๊ณผ ๋กœ์šฐ ์ถ”๊ฐ€

- ์ƒ์„ฑ๋œ DataFrame์— ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ๊ฐ€ ๋กœ์šฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

# ๋‚จ์ž, ์—ฌ์ž ์ธ๊ตฌ์ˆ˜ ์ปฌ๋Ÿผ ์ถ”๊ฐ€

man = [ 1233, 12312, 3234, 23432, 23423, 4656, 6786, 8578, 24123, 24556 ]
woman = [ 1234, 23425, 65654, 57547, 2343, 1233, 5647, 8588, 8989, 12344 ]

data'['๋‚จ์ž'] = man
data['์—ฌ์ž'] = woman

# ์ธ๊ตฌ ์ˆ˜ ์ดํ•ฉ ๋กœ์šฐ ์ถ”๊ฐ€

(1)  ๋กœ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ๊ฐ ์ปฌ๋Ÿผ์˜ ์ดํ•ฉ ๊ตฌํ•˜๊ธฐ

data.sum()

(2) pd.DataFrame.loc[ ]์„ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€

- [ ] ์•ˆ์— ์ถ”๊ฐ€ํ•  ๋กœ์šฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๊ฐ’์„ ์ถ”๊ฐ€ํ•จ

data.loc[10] = data.sum()

(3) ํŠน์ • ๊ฐ’ ๋ณ€๊ฒฝ

- ํŠน์ • ์œ„์น˜์˜ ๊ฐ’๋„ loc๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•จ

- pd.DataFrame.loc[์ธ๋ฑ์Šค, ์ปฌ๋Ÿผ] = ์›ํ•˜๋Š” ๊ฐ’ ์œผ๋กœ ํŠน์ • ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฐ’ ์ €์žฅ

data.loc[ 10, '๋„์‹œ' ] = '์ดํ•ฉ'

#7 ๋‹ค์ค‘ ์ปฌ๋Ÿผ, ๋กœ์šฐ ์„ ํƒ

# ๋กœ์šฐ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ์„ ํƒ

  pd.DataFrame[ ์‹œ์ž‘ ๋กœ์šฐ ๋ฒˆํ˜ธ : ๋ ๋กœ์šฐ ๋ฒˆํ˜ธ ]

- ์•ž๋’ค๋กœ ์‹œ์ž‘ ๋ฒˆํ˜ธ์™€ ๋ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅ

- ๋ ๋ฒˆํ˜ธ์˜ ๊ฒฝ์šฐ ์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ๋์—์„œ๋ถ€ํ„ฐ ์Œ์ˆ˜๋งŒํผ ์ œ์™ธํ•œ ์œ„์น˜๊นŒ์ง€ ํ‘œํ˜„

- data[2:-2]๋ผ๋ฉด ์ธ๋ฑ์Šค 2๋ถ€ํ„ฐ ๋ฐ‘์—์„œ ๋‘๊ฐœ๋ฅผ ์ œ์™ธํ•œ ํ–‰๊นŒ์ง€ ์ถœ๋ ฅ

 

# ๋‹ค์ค‘ ์ปฌ๋Ÿผ, ๋กœ์šฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

1) loc : ๋กœ์šฐ์™€ ์ปฌ๋Ÿผ์˜ ์ธ๋ฑ์Šค๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ

pd.DataFrame.loc[[๋กœ์šฐ_์ธ๋ฑ์Šค1, ๋กœ์šฐ_์ธ๋ฑ์Šค2,...], [์ปฌ๋Ÿผ_์ธ๋ฑ์Šค1, ์ปฌ๋Ÿผ_์ธ๋ฑ์Šค2,...]]
pd.DataFrame.loc[[์‹œ์ž‘_๋กœ์šฐ_์ธ๋ฑ์Šค:๋_๋กœ์šฐ_์ธ๋ฑ์Šค], [์‹œ์ž‘_์ปฌ๋Ÿผ_์ธ๋ฑ์Šค:๋_์ปฌ๋Ÿผ_์ธ๋ฑ์Šค]]

2) iloc : ๋กœ์šฐ์™€ ์ปฌ๋Ÿผ์˜ ์œ„์น˜๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ

pd.DataFrame.iloc[์‹œ์ž‘_๋กœ์šฐ_์œ„์น˜:๋_๋กœ์šฐ_์œ„์น˜, ์‹œ์ž‘_์ปฌ๋Ÿผ_์œ„์น˜:๋_์ปฌ๋Ÿผ_์œ„์น˜]
pd.DataFrame.iloc[[๋กœ์šฐ_์œ„์น˜1, ๋กœ์šฐ_์œ„์น˜2, ๋กœ์šฐ_์œ„์น˜3...], [์ปฌ๋Ÿผ_์œ„์น˜1, ์ปฌ๋Ÿผ_์œ„์น˜2, ์ปฌ๋Ÿผ_์œ„์น˜3...]]

 

- ์‹œ์ž‘ ์œ„์น˜๋ฅผ ๋น„์›Œ๋‘๋ฉด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋ ์œ„์น˜๋ฅผ ๋น„์›Œ๋‘๋ฉด ๋งˆ์ง€๋ง‰ ์œ„์น˜๊นŒ์ง€ ์ฝ์Œ

- ์ด ๋•Œ ์ฃผ์˜์ ์œผ๋กœ ์œ„์น˜์™€ ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ

- data.loc[2:5] ๋Š” 2,3,4,5 ํ–‰์„ ์ฝ์–ด์˜ค์ง€๋งŒ data.iloc[2:5] ๋Š” 2,3,4 ํ–‰๋งŒ์„ ์ฝ์–ด์˜ด


#8 ํ†ต๊ณ„ ํ•จ์ˆ˜

# unique( )

DataFrame[ '์ปฌ๋Ÿผ' ].unique()

- ์ปฌ๋Ÿผ์˜ ๊ณ ์œ ๊ฐ’ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜

# value_counts()

DataFrame[ '์ปฌ๋Ÿผ' ].unique()

- ์ปฌ๋Ÿผ์˜ ๊ณ ์œ ๊ฐ’ ์นด์šดํŠธ๋ฅผ ๋ฐ˜ํ™˜

# ์ˆ˜์น˜๋ฅผ ์ด์šฉํ•œ ํ•จ์ˆ˜

pd.DataFrame.sum() : ๊ฐ ์ปฌ๋Ÿผ์˜ ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜
pd.DataFrame.max() : ๊ฐ ์ปฌ๋Ÿผ์˜ ์ตœ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜
pd.DataFrame.idxmax() : ํŠน์ • ์ปฌ๋Ÿผ์˜ ์ตœ๋Œ€๊ฐ’์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
pd.DataFrame.min() : ๊ฐ ์ปฌ๋Ÿผ์˜ ์ตœ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜
pd.DataFrame.idxmin() : ํŠน์ • ์ปฌ๋Ÿผ์˜ ์ตœ์†Œ๊ฐ’์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
pd.DataFrame.mean() : ๊ฐ ์ปฌ๋Ÿผ์˜ ํ‰๊ท ์„ ๋ฐ˜ํ™˜
pd.DataFrame.median() : ๊ฐ ์ปฌ๋Ÿผ์˜ ์ค‘์•™๊ฐ’์„ ๋ฐ˜ํ™˜
pd.DataFrame.var() : ๊ฐ ์ปฌ๋Ÿผ์˜ ๋ถ„์‚ฐ์„ ๋ฐ˜ํ™˜
pd.DataFrame.std() : ๊ฐ ์ปฌ๋Ÿผ์˜ ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ๋ฐ˜ํ™˜

## ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ธ๊ตฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋„์‹œ ์ฐพ๊ธฐ

data.loc[df['์ธ๊ตฌ์ˆ˜'].idmax()]['๋„์‹œ']

#9 ์ปฌ๋Ÿผ ์‚ฐ์ˆ  ์—ฐ์‚ฐ

- ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปฌ๋Ÿผ๋“ค์„ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

- ํŒ๋‹ค์Šค์˜ ์ปฌ๋Ÿผ๊ณผ ์ปฌ๋Ÿผ์€ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅ

data['๋‚จ์ž+์—ฌ์ž'] = data['๋‚จ์ž'] + data['์—ฌ์ž']

       → ๋‚จ์ž์™€ ์—ฌ์ž์˜ ์ˆ˜๋ฅผ ํ•ฉ์ณ ๋‚จ์ž+์—ฌ์ž๋ผ๋Š” ์ปฌ๋Ÿผ ์ƒ์„ฑ !!

# abs

- ์ ˆ๋Œ€๊ฐ’ ๊ตฌํ•˜๊ธฐ


#10 ๋น„๊ต ์—ฐ์‚ฐ์ž

- Pandas ์—์„œ๋„ ==, !=, >, >=, <, <= ์™€ ๊ฐ™์€ ๋น„๊ต ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๊ฐ€๋Šฅ

# ์ธ๊ตฌ ์ˆ˜ 200๋งŒ๋ช… ์ด์ƒ์˜ ๋„์‹œ ์ฐพ๊ธฐ

data['์ธ๊ตฌ์ˆ˜] >= 2000000

      →  ๊ฒฐ๊ณผ๋Š” true, false๋กœ ๋ฐ˜ํ™˜๋จ

           ( data['์ธ๊ตฌ์ˆ˜] >= 2000000 ).sum() ํ•˜๋ฉด 200๋งŒ๋ช… ์ด์ƒ์ธ ๋„์‹œ๋ฅผ ์นด์šดํŠธ ํ•  ์ˆ˜ ์žˆ์Œ

             *** 2e + 6 = 2 * 10์˜ 6์ œ๊ณฑ !!!!