ํฐ์คํ ๋ฆฌ ๋ทฐ
ํ์ฌ์์ ๋ฐ์ดํฐ๋ถ์ ์ ๋ฌด๋ฅผ ํจ๊ป ํ๋ฉด์ pandas๋ฅผ ํ์ฉํด ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํด๋ณด์๋ค. ๊ทธ ์ค์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฒ๋ค ์์ฃผ๋ก ๊ณต์ ํด๋ณด๋ คํ๋ค.
read_csv, to_csv
ํ์ผ์ dataframe์ผ๋ก ๋ณํํ๋ ๋ฐ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ง๋ง excel๊ณผ csv ํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์๋ค. excel ํ์ผ์ผ ๋ ๋ณดํต csv ํ์ผ๋ก ๋ณํ ํ data๋ฅผ readํ๋ค. ์ด ๋ถ๋ถ๋ง ๋ณด๋ฉด csv ํ์ผ์ด ์ฉ๋์ด ๋ ์์์๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง ์ค์ ๋ก excel ํ์ผ์ด csv ํ์ผ๋ณด๋ค ์ฉ๋์ด ๋ ์๋ค. ๊ทธ๋ผ์๋ csv ํ์ผ์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฒซ๋ฒ์งธ๋ก csv ํ์ผ์ plain text์ด๋ฉฐ ์ฃผ๋ก comma๋ฅผ separate๋ก ๊ฐ์ง๊ณ ์๋ค. excel ํ์ผ์ microsoft excel๋ก flexibleํ์ง ์๋ค. ์ฆ, ๊ฐ๋จํ text editor๋ก๋ ์ฝ๊ฒ ์ด์ด๋ณผ ์ ์๋ค. ๋๋ฒ์งธ๋ memory ์ด์์ด๋ค. csv ํ์ผ์ ์ ์ memory๋ฅผ ์ก๊ธฐ ๋๋ฌธ์ csvํ์ผ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ ๋ ๋ ๋น ๋ฅด๋ค.
python์์ csv ํ์ผ์ ๋ถ๋ฌ์ฌ ๋ read_csv๋ฅผ ์ฌ์ฉํ๋ค. read_csv api์๋ ์ฌ๋ฌ๊ฐ์ง์ parameter๋ค์ด ์์ง๋ง ์์ฃผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋์ ๊ฐ๋ค.
import pandas as pd
csv_filename = '/Users/rimiiii/csvํ์ผ์์น/csv_filename'
# ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
df = pd.read_csv(csv_filename)
- sep: csv ํ์ผ์ seperator, ๋ณดํต comma(,)๋ฅผ ์ฌ์ฉํ์ง๋ง ๋์ ๋ฐ๋ผ ์ธ๋ฏธ์ฝ๋ก (;)์ด๋ tab(\t)์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
- header: column์ ์ด๋ฆ(header)๋ฅผ ์ง์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, 3๋ฒ์งธ ํ์ด ์ด์ ๊ธฐ์ค์ด ๋ ๊ฒฝ์ฐ header=2๋ฅผ ์ฃผ๋ฉด ๋๋ค.
- index_col: header์ ๋น์ทํ ์ญํ ์ด๋ค. row์ index๋ฅผ ์ง์ ํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ None์ผ๋ก index๋ฅผ ์ฃผ์ง ์๋๋ค.
ํ์ผ์ csv ํ์ผ๋ก ์ ์ฅํ ๋ to_csv๋ฅผ ์ฌ์ฉํ๋ค. to_csv์๋ ์ฌ๋ฌ๊ฐ์ง parameter๊ฐ ์์ง๋ง ์ฃผ์ํ ๊ฒ๋ค๋ง ๋ณด์๋ฉด ์๋์ ๊ฐ๋ค.
# ํ์ผ ์ ์ฅํ๊ธฐ
df.to_csv('์ ์ฅํ _ํ์ผ_์์น/์ ์ฅํ _ํ์ผ์ด๋ฆ.csv')
- sep: csv ํ์ผ์ ์ ์ฅํ ๋ ์ฌ์ฉํ seperator์ด๋ค. ๊ธฐ๋ณธ๊ฐ์ comma(,)์ด๋ค.
- header: header๋ฅผ ์ ์ฅํ ์ง ์ ํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ True์ด๋ฉฐ, False๋ฉด header๋ฅผ ์ฐ์ง ์๊ณ list๋ก column์ด๋ฆ์ ์ง์ ํด์ค ์ ์๋ค.
- index: index๋ ํจ๊ป ์ ์ฅํ ์ง ์ ํํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ True๋ก index๋ฅผ ํจ๊ป ์ ์ฅํ๋ค.
- mode: csv ํ์ผ์ ์ ์ฅํ ๋ w, a๋ฅผ ์ ํํ ์ ์๋ค. w์ ๊ฒฝ์ฐ, ํ์ผ์ ๋ง๋ค์ด ์ ์ฅํ๋ ๊ฒ์ด๊ณ a์ ๊ฒฝ์ฐ ํ์ผ์ ๋ฎ์ด์์ธ ์ ์๋ค. list.append์ ๋น์ทํ ์ญํ ์ด๋ค.
filtering
๋ฐ์ดํฐ๋ถ์์ ์์ด ์ํ๋ ๊ฐ๋ค๋ง ์ถ์ถํ๊ฑฐ๋ ์ฌ๋ฌ ํต๊ณ์งํ๋ฅผ ์ถ์ถํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋ ์ ์ฉํ ํจ์๋ก filter๊ฐ ์๋ค. ์๋์ ๊ฐ์ ํ๊ฐ ์์ ๋ 4000์ ์ด์์ธ menu๋ค๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด df.price ≥ 4000์ ์ฌ์ฉํ ์ ์๋ค. ๊ฒฐ๊ณผ๋ ํ ๋ณ๋ก ํด๋น ์ฐ์ฐ์๊ฐ True๋ผ๋ฉด True, False๋ผ๋ฉด False๋ฅผ ๋ด๋ฑ๋๋ค. True์ ํด๋นํ๋ row๋ง ๋ฝ๊ณ ์ถ๋ค๋ฉด df๋ก ํ๋ฒ ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
df = pd.DataFrame({'menu': ['์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ', '๋ฐํฌํฐ', '๋ธ๊ธฐ๋ผ๋ผ'],
'price': [3000, 4000, 5000]})
df.price >= 4000
#0 False
#1 True
#2 True
#Name: price, dtype: bool
df[df.price >= 4000]
๋ง์ผ ์ฌ๋ฌ๊ฐ์ง filtering์ ๊ฑธ๊ณ ์ถ๋ค๋ฉด &์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๊ฒฉ์ด 4000์ ์ด์์ด๊ณ ๋ธ๊ธฐ๋ผ๋ผ๋ menu๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ ๊ดํธ๊ฐ ์ถ๊ฐ๋ก ๋ค์ด๊ฐ๋๋ฐ ์ํ ์ฐ์ฐ๊ณผ ๋น์ทํ๋ค. ์ด๋ ๋ถ๋ถ์ ๋จผ์ ๊ณ์ฐํ ์ง ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
df[(df.price >= 4000) & (df.menu == '๋ธ๊ธฐ๋ผ๋ผ')]
์ด์ธ์๋ isin์ด ์๋ค. ์ด๋ค list์ ์ํ ๊ฐ๋ค๋ง filteringํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
df[df.menu.isin(['๋ธ๊ธฐ๋ผ๋ผ', '์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ'])]
๋๋ isna()๋ฅผ ์ด์ฉํ๋ฉด null๊ฐ์ row๋ง ์ถ์ถํด์ค๋ค.
df = pd.DataFrame({'menu': ['์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ', '๋ฐํฌํฐ', '๋ธ๊ธฐ๋ผ๋ผ', '๋
น์ฐจ๋ผ๋ด'], 'price': [3000, 4000, 5000, None]})
df[df.price.isna()]
์ฐ๋ฆฌ๊ฐ ์ถ์ถํ๋ ค๋ ํํฐ๋ง์ ๋ฐ๋ row๋ง ๋ฝ๊ธฐ ์ํด์ ~(๋ฌผ๊ฒฐ)์ ์ด์ฉํ๋ฉด ๋๋ค. ๋ฌผ๊ฒฐ์ ๋ฃ๊ฒ ๋๋ฉด True๋ False, False๋ True๋ก ๋ณํ๋๋ค.
~df.price.isna()
#0 True
#1 True
#2 True
#3 False
#Name: price, dtype: bool
df[~df.price.isna()]
groupby
์ด๋ค group์ ํ๊ท ๊ฐ์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ๊ทธ๋ด๋ groupby๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. groupby๋ ๊ต์ฅํ ์ ์ฉํ api์ด๋ค. ๊น๊ฒ ์์๋ก ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ์๋์ dataframe์ด ์์ ๋ shop ๋ณ๋ก ๊ฐ๊ฒฉ์ ํ๊ท ์ ๊ณ์ฐํ๊ธฐ ์ํด์ groupby(’shop_name’).mean()์ ์ฌ์ฉํ๋ฉด ๋๋ค. mean ์ด์ธ์๋ count, sum, var ๋ฑ์ด ์๋ค.
df = pd.DataFrame({'shop_name': ['A', 'A', 'A', 'A', 'B', 'B', 'B'], 'menu': ['์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ', '๋ฐํฌํฐ', '๋ธ๊ธฐ๋ผ๋ผ', '๋
น์ฐจ๋ผ๋ด', '์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ', '๋ฐํฌํฐ', '์นดํ๋ผ๋ผ'], 'price': [3000, 4000, 5000, 5500, 4000, 5000, 4500]})
df.groupby('shop_name').mean()
iloc
ํน์ ํ๊ณผ ํน์ ์ด๋ง ๋ฝ์๋ณด๊ณ ์ถ์๋ list๋ array๋ ๋ฐ๋ก ๊ดํธ๋ฅผ ์ด์ฉํด ํน์ ํ ๋๋ ์ด์ ๋ถ๋ฌ์จ๋ค. dataframe์ iloc์ ์ด์ฉํด์ผํ๋ค.
df.iloc[3] # 3๋ฒ์งธ ํ์ ์๋ row ๊ฐ์ ธ์ค๊ธฐ
df.iloc[3,2] #3๋ฒ์งธ ํ, 2๋ฒ์งธ ์ด์ ์๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
#shop_name A
#menu ๋
น์ฐจ๋ผ๋ด
#price 5500
#Name: 3, dtype: object
#5500
iterrows
dataframe์ for loop์ ๋๋ฆฌ๊ธฐ ์ํด์ iterrows๋ฅผ ์ฌ์ฉํ๋ค. iterrows๋ ํํ๋ก ๋ด๋ฑ๋๋ฐ row์ index์ series ํํ์ row๋ฅผ ๋ฑ๋๋ค.
for idx, row in df.iterrows():
print(row['menu'])
# ์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ
# ๋ฐํฌํฐ
# ๋ธ๊ธฐ๋ผ๋ผ
# ๋
น์ฐจ๋ผ๋ด
# ์์ด์ค์๋ฉ๋ฆฌ์นด๋
ธ
# ๋ฐํฌํฐ
# ์นดํ๋ผ๋ผ
apply
์ด ํจ์๋ ์ ๋ง ์ ์ฉํ๋ค. ํน์ ์ปฌ๋ผ๊ฐ๋ค์ ์ผ๊ด์ ์ผ๋ก ์ด๋ค ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์๋, ์ข ๋ ๋ณต์กํ ๋ก์ง์ ์ถ๊ฐํ๊ณ ์ถ์ ๋ apply๋ฅผ ์ธ ์ ์๋ค. ํ๋์ ์ปฌ๋ผ ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ์ปฌ๋ผ๋ ๊ฐ๋ฅํ๋ค. Cython iterater๋ฅผ ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ for loop๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค. ๋จ, dataframe์ด ๋๋ฌด ํด ๊ฒฝ์ฐ์๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๋ค.
df.menu.apply(lambda x: x.replace('์์ด์ค', '๋ฐ๋ปํ'))
# 0 ๋ฐ๋ปํ์๋ฉ๋ฆฌ์นด๋
ธ
# 1 ๋ฐํฌํฐ
# 2 ๋ธ๊ธฐ๋ผ๋ผ
# 3 ๋
น์ฐจ๋ผ๋ด
# 4 ๋ฐ๋ปํ์๋ฉ๋ฆฌ์นด๋
ธ
# 5 ๋ฐํฌํฐ
# 6 ์นดํ๋ผ๋ผ
# Name: menu, dtype: object
2๊ฐ ์ด์์ ์ปฌ๋ผ์ ํจ๊ป ๊ณ์ฐํ๊ณ ์ถ์๋ axis๋ฅผ ์ถ๊ฐํด์ผํ๋ค. menu์ ์์ด์ค๊ฐ ๋ค์ด๊ฐ๋ ์๋ฃ๋ผ๋ฉด price์ 500์์ ์ถ๊ฐํ์ฌ ์๋ก์ด ์ปฌ๋ผ์ ๋ฃ๊ณ ์ถ๋ค๊ณ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํํ๋ฉด ๋๋ค.
def add_ice_price(menu, price):
return price+500 if '์์ด์ค' in menu else price
df['new_price'] = df.apply(lambda x: add_ice_price(x.menu, x.price), axis=1)
df
rename
ํน์ ์ปฌ๋ผ๋ค์ ์ด๋ฆ์ ๋ฐ๊พธ๊ณ ์ถ์๋ ์ฌ์ฉํ ์ ์๋ค. ๋ชจ๋ ์ปฌ๋ผ์ ์๋ฌธ์๋ก ๋ฐ๊พธ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ๋์ ๋๋ฆฌ ํํ์ mapper๋ฅผ ์ด์ฉํ๋ค.
df.rename(columns={'menu': '๋ฉ๋ด', 'price': '๊ฐ๊ฒฉ'})
df.rename(str.upper, axis='columns')
'๐ป Dev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐โโ๏ธ [python] ray๋ก ์นผํด๋ฅผ ํด๋ณด์ (0) | 2024.05.02 |
---|---|
๐ [python] jpeg๋ก ์ธ์ฝ๋ฉํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ณํ๋ค? (0) | 2024.05.02 |
๐ณ ์ด์ ๋ docker๋ฅผ ํด์ผํ ๋.. (0) | 2024.04.22 |
๐ [Git]forkํ branch ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ (0) | 2024.04.17 |
๐ฏ [Git] merge๋์ง ์์ ์์ค์ฝ๋ pullํ๊ธฐ (0) | 2024.04.17 |
- vscode
- ๊ธ๋
- python
- Computer Vision
- ๋ ํ๊ฐ
- ๊ฐ๋ฐ์
- GIT
- Generative Model
- Multiprocessing
- ๋ฒ ์ด์ฆ ์ ๋ฆฌ
- tmux
- ๋จธ์ ๋ฌ๋ ์ด๋ก
- ์ฑ ๋ฆฌ๋ทฐ
- linux
- ํ๊ณ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Total
- Today
- Yesterday