MODE1 ์๊ฐ๋ณ๊ฒฝ
MODE2 ์๋ฆผ์ค์ ๋ฐ ๋์ ์์ฐ
MODE3 ํ์ด๋จธ(์คํฑ์์น)
shift๋ฉ์๋๋ ์๊ณ์ด ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ ์ธ๋ฑ์ค๋ฅผ ์ํ๋ ๊ธฐ๊ฐ๋งํผ ์ฌํํธ ํ๋ ๋ฉ์๋ ์
๋๋ค.
freq ์ธ์๋ฅผ ์
๋ ฅํ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๊ณ , ์ธ์๊ฐ์ ์
๋ ฅํ๊ฒ๋๋ฉด ์ธ๋ฑ์ค๊ฐ freq๊ฐ ๋งํผ ์ด๋ํ๊ฒ๋ฉ๋๋ค.
์ฌ์ฉ๋ฒ
df.shift(periods=1, freq=None, axis=0, fill_value=NoDefault.no_default)
periods : ์ด๋ํ ๊ธฐ๊ฐ์
๋๋ค.
freq : ์
๋ ฅ ํ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๊ฐ ์ด๋ํ๊ฒ ๋ฉ๋๋ค. Y, M, D, H, T, S ๋ Timestamp, 'Infer'๋ฑ์ด ์ฌ ์ ์์ต๋๋ค.
fill_value : shift๋ก ์ธํด ์๊ธด ๊ฒฐ์ธก์น๋ฅผ ๋์ฒดํ ๊ฐ์
๋๋ค.
์์
๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
import pandas as pd
df = pd.read_csv("../input/bigdatacertificationkr/basic2.csv")
df

df.shift(1)

ํ์ด ๋ค๋ก ํ ์นธ ๋ฐ๋ฆฐ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
df.shift(-1)

ํ์ด ์์ผ๋ก ํ ์นธ ๋ฐ๋ฆฐ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. (๋ง์ง๋ง ์ค NaN์ผ๋ก ํ์ธ)
df['previous_PV'] = df['PV'].shift(1)
df.head()

ํน์ ์ปฌ๋ผ์ shift ํ์ฌ ์๋ก์ด ์ปฌ๋ผ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ฐธ์กฐ: https://wikidocs.net/158146
duplicated : ์ค๋ณต๋๋ ํ์ ํ์ธ
ํ์ ๋ชจ๋ ์์๊ฐ ๋์ผํ ํ์ด ์ด๋ฏธ ์กด์ฌํ ๊ฒฝ์ฐ ํด๋น ํ์ True๋ก ๋ฐํ
df.duplicated(subset=None, keep='first')
subset : ํน์ ์ด๋ง์ ๋์์ผ๋ก ํ ์ ์์ต๋๋ค. list์ ์ฌ์ฉ๋ ๊ฐ๋ฅํฉ๋๋ค.
keep : {first : ์๋ถํฐ ๊ฒ์ฌ / last : ์๋๋ถํฐ ๊ฒ์ฌ} ๊ฒ์ฌ ์์๋ฅผ ์ ํฉ๋๋ค. first์ผ ๊ฒฝ์ฐ ์๋ถํฐ ํ์ธํด์ ์ค๋ณตํ์ด ๋์ค๋ฉด True๋ฅผ ๋ฐํํ๋ฉฐ, last์ผ ๊ฒฝ์ฐ ์๋๋ถํฐ ํ์ธํฉ๋๋ค.
์์
df = pd.DataFrame({'Num':[1, 2, 1, 2, 2, 3],
'Alphabet':['a', 'b', 'a', 'b', 'a', 'b']})
df

keep='first'์ด๋ฉฐ ์์์๋ถํฐ ํ์ ํ์ธํ์ฌ ์ค๋ณต์ธ ํ์ด ๋์ค๋ฉด True๋ฅผ ๋ฐํ
print(df.duplicated(keep='first'))

keep='last'์ผ ๊ฒฝ์ฐ ์๋๋ถํฐ ํ์ ํ์ธํ์ฌ ์ค๋ณต์ธ ํ์ด ๋์ค๋ฉด True๋ฅผ ๋ฐํ
print(df.duplicated(keep='last'))

์๋ ํ ๋ถํฐ ํ์ธ ํ์์ผ๋ฏ๋ก 0,1๋ฒ์งธ ํ ๋ฐ์ดํฐ๊ฐ ์๋ 2,3๋ฒ์งธ ํ์ ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋๋ค.
subset์ผ๋ก ํน์ ์ด๋ง ํ์ธ
print(df.duplicated(subset=['Alphabet']))

drop_duplicates : ๋ด์ฉ์ด ์ค๋ณต๋๋ ํ์ ์ ๊ฑฐํ๋ ๋ฉ์๋
df.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
subset : ์ค๋ณต๊ฐ์ ๊ฒ์ฌํ ์ด ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ด์ ๊ฒ์ฌํฉ๋๋ค.
keep : {first / last} ์ค๋ณต์ ๊ฑฐ๋ฅผํ ๋ ๋จ๊ธธ ํ์
๋๋ค. first๋ฉด ์ฒซ๊ฐ์ ๋จ๊ธฐ๊ณ last๋ฉด ๋ง์ง๋ง ๊ฐ์ ๋จ๊น๋๋ค.
inplace : ์๋ณธ์ ๋ณ๊ฒฝํ ์ง์ ์ฌ๋ถ์
๋๋ค.
ignore_index : ์๋ index๋ฅผ ๋ฌด์ํ ์ง ์ฌ๋ถ์
๋๋ค. True์ผ ๊ฒฝ์ฐ 0,1,2, ... , n์ผ๋ก ๋ถ์ฌ๋ฉ๋๋ค.
์์
df = pd.DataFrame({'Num':[1, 2, 1, 2, 2, 3],
'Alphabet':['a', 'b', 'a', 'b', 'a', 'b']})
df

df.drop_duplicates()

0,1๋ฒ์งธ ํ๊ณผ ์ค๋ณต๋ 2,3๋ฒ์ฌ ํ ์ ๊ฑฐ
subset์ ํน์ ์ปฌ๋ผ๋ช ๋ง ์ ๋ ฅํ ๊ฒฝ์ฐ, ํด๋น ์ด์๋ํด์๋ง ์ค๋ณต๊ฐ ๊ฒ์ฌ๋ฅผ ์ํ
df.drop_duplicates(subset='Num')

keep์ธ์๋ฅผ ํตํด ๋จ๊ธธ ํ ์ ํ
keep='first'์ธ ๊ฒฝ์ฐ ์ฒ์ ๊ฐ์ ๋จ๊น๋๋ค. (๊ธฐ๋ณธ๊ฐ)
df.drop_duplicates(subset='Num', keep='first')

keep='last'์ธ ๊ฒฝ์ฐ ๋ง์ง๋ง ๊ฐ์ ๋จ๊น๋๋ค.
df.drop_duplicates(subset='Num', keep='last')

์ถ๊ฐ๋ก ignore_index=True๋ก ํ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ 0, 1, 2, ... , n์ผ๋ก ์ค์ ํฉ๋๋ค.
df.drop_duplicates(subset='Num', keep='last',ignore_index=True)

์์ ๊ฒฐ๊ณผ์ ๋์ผํ์ง๋ง ์ธ๋ฑ์ค๊ฐ ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
inplace ์ธ์์ ์ฌ์ฉ
Pandas ๊ณตํต์ฌํญ์ผ๋ก inplace์ธ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ณธ์ ๋ณ๊ฒฝ์ด ์ ์ฉ
df.drop_duplicates(subset='Num',inplace=True)
print(df)

์ฐธ์กฐ: https://wikidocs.net/154060
09-07. ์ค๋ณตํ ์ ๊ฑฐ (drop_duplicates)
####DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False) ##๊ฐ์ `d…
wikidocs.net
12-08 ์ค๋ณตํ ํ์ธ (duplicated)
####DataFrame.duplicated(subset=None, keep='first') ##๊ฐ์ `duplicated` ๋ฉ์๋๋ ์ค๋ณต๋๋ ํ์ ํ์ธํ๋ ๋ฉ์๋์ ๋๋ค. ํ์ …
wikidocs.net
์๊ฐ ๋ฐ์ดํฐ๋ฅผ DataFrame์ผ๋ก ์ฒ๋ฆฌํ ๋ Pandas resample() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ์ ์ฌ์กฐ์ ํ ์ ์๋ค.
import pandas as pd
df = pd.read_csv("../input/bigdatacertificationkr/basic2.csv", parse_dates=['Date'], index_col=0)
์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
์ฃผ ๋จ์์ ์ปฌ๋ผ ํฉ๊ณ๋ฅผ ๊ตฌํด๋ณด์!
resample('W') ์ฌ์ฉ
df_w = df.resample('W').sum()
df_w

Date ์ปฌ๋ผ์ ๋ณด๋ฉด ์ฃผ ๋จ์๋ก ๋ณ๊ฒฝ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๋จ์์ ์ปฌ๋ผ ํฉ๊ณ๋ฅผ ๊ตฌํด๋ณด์.
resample('M') ์ฌ์ฉ
df_m = df.resample('M').sum()
df_m

Date ์ปฌ๋ผ์ ๋ณด๋ฉด ์(๋ง์ง๋ง๋ ๊ธฐ์ค) ๋จ์๋ก ๋ณ๊ฒฝ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
resample('MS') ์ฌ์ฉ
df_ms = df.resample('MS').sum()
df_ms

Date ์ปฌ๋ผ์ ๋ณด๋ฉด ์(์์ ์ผ ๊ธฐ์ค) ๋จ์๋ก ๋ณ๊ฒฝ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ ์ง ์คํ์ ๋น๋ ๋ฌธ์์ด์ค๋ช
์ฐธ๊ณ : https://pandas.pydata.org/pandas-docs/stable/user_guide/window.html
| DateOffset | ์์ | ์ผ๋ฐ ์คํ์ ํด๋์ค, ๊ธฐ๋ณธ๊ฐ์ ์ ๋ 24์๊ฐ์ ๋๋ค. |
| BDay๋๋BusinessDay | 'B' | ์์ ์ผ(ํ์ผ) |
| CDay๋๋CustomBusinessDay | 'C' | ๋ง์ถค ์์ ์ผ |
| Week | 'W' | ์ผ์ฃผ์ผ, ์ ํ์ ์ผ๋ก ์์ผ์ ๊ณ ์ |
| WeekOfMonth | 'WOM' | ๋งค์ y๋ฒ์งธ ์ฃผ์ x๋ฒ์งธ ๋ |
| LastWeekOfMonth | 'LWOM' | ๋งค์ ๋ง์ง๋ง ์ฃผ์ x๋ฒ์งธ ๋ |
| MonthEnd | 'M' | ์ญ์๋ง |
| MonthBegin | 'MS' | ์ญ์ ์์ |
| BMonthEnd๋๋BusinessMonthEnd | 'BM' | ์์ ์๋ง |
| BMonthBegin๋๋BusinessMonthBegin | 'BMS' | ์์ ์ ์์ |
| CBMonthEnd๋๋CustomBusinessMonthEnd | 'CBM' | ๋ง์ถคํ ์์ ์๋ง |
| CBMonthBegin๋๋CustomBusinessMonthBegin | 'CBMS' | ๋ง์ถคํ ๋น์ฆ๋์ค ์ ์์ |
| SemiMonthEnd | 'SM' | 15์ผ(๋๋ ๋ค๋ฅธ day_of_month) ๋ฐ ์ญ์๋ง |
| SemiMonthBegin | 'SMS' | 15์ผ(๋๋ ๋ค๋ฅธ day_of_month) ๋ฐ ์ญ์ ์์ |
| QuarterEnd | 'Q' | ๋ฌ๋ ฅ ๋ถ๊ธฐ๋ง |
| QuarterBegin | 'QS' | ๋ฌ๋ ฅ ๋ถ๊ธฐ ์์ |
| BQuarterEnd | 'BQ | ์ฌ์ ๋ถ๊ธฐ๋ง |
| BQuarterBegin | 'BQS' | ์ฌ์ ๋ถ๊ธฐ ์์ |
| FY5253Quarter | 'REQ' | ์๋งค(์ผ๋ช 52-53์ฃผ) ๋ถ๊ธฐ |
| YearEnd | 'A' | ๋ฌ๋ ฅ ์ฐ๋ง |
| YearBegin | 'AS'๋๋'BYS' | ์ญ๋ ์์ |
| BYearEnd | 'BA' | ์ฌ์ ์ฐ๋ง |
| BYearBegin | 'BAS' | ์ฌ์ ์ฐ๋ ์์ |
| FY5253 | 'RE' | ์๋งค(์ผ๋ช 52-53์ฃผ) ์ฐ๋ |
| Easter | ์์ | ๋ถํ์ |
| BusinessHour | 'BH' | ์์ ์๊ฐ |
| CustomBusinessHour | 'CBH' | ๋ง์ถค ์ ๋ฌด ์๊ฐ |
| Day | 'D' | ์ ๋์ ์ธ ํ๋ฃจ |
| Hour | 'H' | ํ ์๊ฐ |
| Minute | 'T'๋๋'min' | 1๋ถ |
| Second | 'S' | ์ผ์ด |
| Milli | 'L'๋๋'ms' | 1๋ฐ๋ฆฌ์ด |
| Micro | 'U'๋๋'us' | 1๋ง์ดํฌ๋ก์ด |
| Nano | 'N' | 1๋๋ ธ์ด |
| [pandas] ๋ฐ์ดํฐํ๋ ์ ํ ์ด๋ํ๊ธฐ .shift() (0) | 2023.06.15 |
|---|---|
| [pandas] ์ค๋ณต ์ฒ๋ฆฌ(duplicated, drop_duplicates) (0) | 2023.06.14 |
| [python] ๋ฐ์ดํฐํ๋ ์ ๋ณํฉํ๊ธฐ pd.merge() (0) | 2023.06.10 |
| [python] read_csv๋ก ๋ฐ์ดํฐ ๋ถ๋ฌ์ฌ ์ parse_dates ์ต์ ์ผ๋ก datetime ํํ๋ก ์ง์ ํ๊ธฐ (0) | 2023.06.09 |
| [python] ์ธ๋ฑ์ค๋ฅผ ์ด๋ก ๋ณํ (reset_index) (0) | 2023.06.06 |
pd.merge๋ ๊ณตํต์ ์ด์ ๊ธฐ์ค์ผ๋ก ๋ ๋ฐ์ดํฐํ๋ ์์ ํฉ์ณ์ค๋ค.
import pandas as pd
# ๊ธฐ์ค์ด ์ด๋ฆ์ด ๊ฐ์ ๋
pd.merge(left, right, on = '๊ธฐ์ค์ด', how = '์กฐ์ธ๋ฐฉ์')
# ๊ธฐ์ค์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋
pd.merge(left, right, left_on = '์ผ์ชฝ ์ด', right_on = '์ค๋ฅธ์ชฝ ์ด', how = '์กฐ์ธ๋ฐฉ์')
left: ์ผ์ชฝ ๋ฐ์ดํฐ ํ๋ ์
right: ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ ํ๋ ์
on: (๋ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ค์ด ์ด๋ฆ์ด ๊ฐ์ ๋) ๊ธฐ์ค์ด
how: ์กฐ์ธ ๋ฐฉ์('left', 'right', 'inner', 'outer') ๊ธฐ๋ณธ๊ฐ์ 'inner'
left_on: ๊ธฐ์ค์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋, ์ผ์ชฝ ๊ธฐ์ค์ด
right_on: ๊ธฐ์ค์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋, ์ค๋ฅธ์ชฝ ๊ธฐ์ค์ด
์์
# ์์ ๋ฐ์ดํฐ ์์ฑ
students = pd.DataFrame({'Num':[4, 14, 7, 11, 10], 'students':['์ฑ์น์', '์ ๋๋ง', '์กํ์ญ', '์ํ์
', '๊ฐ๋ฐฑํธ']})
grade = pd.DataFrame({'Num':[14, 11, 12], 'Grade':['A', 'B', 'C']})

students๊ณผ grade๋ Num๋ฅผ ๊ณตํต์ ์ด๋ก ๊ฐ์ง๊ณ ์๋ค.
Num๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐํ๋ ์์ ๋ณํฉํด๋ณด์.

Left Join: ์ผ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ์๋ ๊ฐ์ NaN์ผ๋ก ๋ํ๋๋ค.
pd.merge(left, right, on = 'col', how = 'left')

Right Join: ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ค์ผ๋ก ์กฐ์ธํ๋ค. ์ผ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ์๋ ๊ฐ์ NaN์ผ๋ก ๋ํ๋ธ๋ค.
pd.merge(left, right, on = 'col', how = 'right')

Inner Join: ๊ต์งํฉ์ ์๋ฏธํ๋ค. ์์ชฝ์ ๊ณตํต์ผ๋ก ์๋ ๊ฐ๋ง ๋ํ๋ธ๋ค.
pd.merge(left, right, on = 'col', how = 'inner')

Outer Join: ๋ชจ๋ ๊ฐ์ด ๋ํ๋๋๋ก ํ๋ค. ์ผ์ชฝ ๋ฐ์ดํฐํ๋ ์๊ณผ ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐํ๋ ์์ ์๋ ๊ฐ๋ค์ NaN์ผ๋ก ๋ํ๋๋ค.
pd.merge(left, right, on = 'col', how = 'outer')

๊ณตํต์ด ๋๋ ๊ธฐ์ค ์ด์ด ์ฌ๋ฌ ๊ฐ์ผ ๋
pd.merge(left, right, on = ['col1', 'col2'])
๋ ๋ฐ์ดํฐํ๋ ์์ ์ด ์ด๋ฆ์ด ๋ค๋ฅผ ๋
์ ์์์ฒ๋ผ ์์ชฝ ๋ฐ์ดํฐํ๋ ์์์ merge์ ๊ธฐ์ค์ด ๋๋ ์ด์ ์ด๋ฆ์ด ๊ฐ๋ค๋ฉด on = '๊ธฐ์ค์ด'๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค. ํ์ง๋ง ์์ชฝ ๋ฐ์ดํฐํ๋ ์์์ ๊ธฐ์ค์ด ๋๋ ์ด์ ์ด๋ฆ์ด ๋ค๋ฅด๋ค๋ฉด ๊ฐ๊ฐ left_on = '์ผ์ชฝ ์ด', right_on = '์ค๋ฅธ์ชฝ ์ด'๋ก ์ง์ ํ๋ฉด ๋๋ค.
pd.merge(left, right, left_on = '์ผ์ชฝ ์ด', right_on = '์ค๋ฅธ์ชฝ ์ด')
| [pandas] ์ค๋ณต ์ฒ๋ฆฌ(duplicated, drop_duplicates) (0) | 2023.06.14 |
|---|---|
| [pandas] .resample ์๊ณ์ด ์๋ฃ ์๊ฐ๊ฐ๊ฒฉ ๋ฆฌ์ํ๋งํ๊ธฐ (1) | 2023.06.13 |
| [python] read_csv๋ก ๋ฐ์ดํฐ ๋ถ๋ฌ์ฌ ์ parse_dates ์ต์ ์ผ๋ก datetime ํํ๋ก ์ง์ ํ๊ธฐ (0) | 2023.06.09 |
| [python] ์ธ๋ฑ์ค๋ฅผ ์ด๋ก ๋ณํ (reset_index) (0) | 2023.06.06 |
| [python] ๊ฒฐ์ธก๊ฐ ๋์ฒด/๋ณ๊ฒฝ (fillna) (0) | 2023.06.06 |
import pandas as pd
df = pd.read_csv('../input/bigdatacertificationkr/basic2.csv')
print(df.head())

df.info()

pd.to_datetime ์ด์ฉํ์ฌ ๋ณ๊ฒฝ
df['Date'] = pd.to_datetime(df['Date'])
df.info()

df.info()๋ฅผ ํตํ์ฌ Date ์นผ๋ผ์ Dtype์ด objectd์์ datetime64[ns]๋ก ๋ฐ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
df = pd.read_csv("../input/bigdatacertificationkr/basic2.csv", parse_dates=['Date'])
df.info()

Date ์นผ๋ผ์ด ๋ฐ๋ก datetime64[ns]๋ก ๋ฐ๋์ด์ ธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์์ ์ ์ ์๋ค.
| [pandas] .resample ์๊ณ์ด ์๋ฃ ์๊ฐ๊ฐ๊ฒฉ ๋ฆฌ์ํ๋งํ๊ธฐ (1) | 2023.06.13 |
|---|---|
| [python] ๋ฐ์ดํฐํ๋ ์ ๋ณํฉํ๊ธฐ pd.merge() (0) | 2023.06.10 |
| [python] ์ธ๋ฑ์ค๋ฅผ ์ด๋ก ๋ณํ (reset_index) (0) | 2023.06.06 |
| [python] ๊ฒฐ์ธก๊ฐ ๋์ฒด/๋ณ๊ฒฝ (fillna) (0) | 2023.06.06 |
| [python] ๋์ ํฉ/๋์ ๊ณฑ (cumsum / cumprod) (0) | 2023.06.06 |
reset_index: ์ค์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐํ๊ณ ๊ธฐ๋ณธ ์ธ๋ฑ์ค(0,1,2, ... , n)์ผ๋ก ๋ณ๊ฒฝ
์์
๋จผ์ 3x2 ๋ฐ์ดํฐํ๋ ์ ์์ฑ
import pandas as pd
df = pd.DataFrame([[1,2],[3,4],[5,6]],['row1','row2','row3'],['col1','col2'])
print(df)
col1 col2
row1 1 2
row2 3 4
row3 5 6
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ(+drop, inplace)
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฌด ์ธ์ ์์ด ์ฌ์ฉํ๊ฒ ๋๋ฉด, ๋ชจ๋ ๋ ๋ฒจ์ ๋ํด ์ธ๋ฑ์ค๊ฐ ์ ๊ฑฐ๋๋ฉฐ, ์ด์ ์ถ๊ฐ๋ฉ๋๋ค.
print(df.reset_index())
index col1 col2
0 row1 1 2
1 row2 3 4
2 row3 5 6
์ฒซ๋ฒ์งธ ์ด 0,1,2 ์ถ๊ฐ / row1 ์ด ์ปฌ๋ผ๋ช index๋ก ๋ฐ๋
drop = True์ธ ๊ฒฝ์ฐ ์ด์ด ๋ฐ์ผ๋ก ๊บผ๋ด์ง๋๊ฒ ์๋๋ผ ์์ ํ ์ญ์ ๋ฉ๋๋ค.
print(df.reset_index(drop=True))
col1 col2
0 1 2
1 3 4
2 5 6
index ์ปฌ๋ผ ์ญ์ / 0 1 2 ์์๋ก๋ง ๋จ์
inplace=True์ธ ๊ฒฝ์ฐ ์๋ณธ์ด ๋ณ๊ฒฝ๋๊ฒ ๋ฉ๋๋ค.
df.reset_index(inplace=True)
print(df)
index col1 col2
0 row1 1 2
1 row2 3 4
2 row3 5 6
Multi Index ์์
4x4์ง๋ฆฌ Multi Index ์์ฑ
idx = [['IDX1','IDX1','IDX2','IDX2'],['row1','row2','row3','row4']]
col = [['COL1','COL1','COL2','COL2'],['val1','val2','val3','val4']]
data = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
df2 = pd.DataFrame(data,idx,col)
print(df2)
COL1 COL2
val1 val2 val3 val4
IDX1 row1 1 2 3 4
row2 5 6 7 8
IDX2 row3 9 10 11 12
row4 13 14 15 16
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ(+level)
Multi Index์ ๊ฒฝ์ฐ level์ ์ค์ ํด์ค์ผ๋ก์ ์ ๊ฑฐํ ์ธ๋ฑ์ค์ ๋ ๋ฒจ์ ์ ํํ ์ ์์ต๋๋ค.
level์ ์
๋ ฅํ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ index์ ๋ํด์ ์ํ๋ฉ๋๋ค.
print(df2.reset_index())
level_0 level_1 COL1 COL2
val1 val2 val3 val4
0 IDX1 row1 1 2 3 4
1 IDX1 row2 5 6 7 8
2 IDX2 row3 9 10 11 12
3 IDX2 row4 13 14 15 16
level=0์ธ ๊ฒฝ์ฐ
print(df2.reset_index(level=0))
level_0 COL1 COL2
val1 val2 val3 val4
row1 IDX1 1 2 3 4
row2 IDX1 5 6 7 8
row3 IDX2 9 10 11 12
row4 IDX2 13 14 15 16
level=1์ธ ๊ฒฝ์ฐ
print(df2.reset_index(level=1))
level_1 COL1 COL2
val1 val2 val3 val4
IDX1 row1 1 2 3 4
IDX1 row2 5 6 7 8
IDX2 row3 9 10 11 12
IDX2 row4 13 14 15 16
col_fill / col_level์ ์ฌ์ฉ
col_fill์ ์ด์ฉํ์ฌ ์ด๋ก ๋ณ๊ฒฝ๋๋ ์ธ๋ฑ์ค์ ์ด ์ด๋ฆ์ ์ค์ ํ ์ ์์ต๋๋ค. COL0์ผ๋ก ์ค์ ํด๋ณด๊ฒ ์ต๋๋ค.
print(df2.reset_index(level=1, col_fill='COL0'))
level_1 COL1 COL2
COL0 val1 val2 val3 val4
IDX1 row1 1 2 3 4
IDX1 row2 5 6 7 8
IDX2 row3 9 10 11 12
IDX2 row4 13 14 15 16
col_level์ ์ด์ฉํด ์ด ์ด๋ฆ์ ๋ ๋ฒจ์ ์ ํ ์ ์์ต๋๋ค. COL0์ ๋ค๋ฅธ ์ด์ด๋ฆ์ ๋ง๊ฒ LEVEL์ ๋ณ๊ฒฝํด๋ณด๊ฒ ์ต๋๋ค.
print(df2.reset_index(level=1,col_fill='col0',col_level=1))
col0 COL1 COL2
level_1 val1 val2 val3 val4
IDX1 row1 1 2 3 4
IDX1 row2 5 6 7 8
IDX2 row3 9 10 11 12
IDX2 row4 13 14 15 16
์ถ์ฒ: https://wikidocs.net/155404
| [python] ๋ฐ์ดํฐํ๋ ์ ๋ณํฉํ๊ธฐ pd.merge() (0) | 2023.06.10 |
|---|---|
| [python] read_csv๋ก ๋ฐ์ดํฐ ๋ถ๋ฌ์ฌ ์ parse_dates ์ต์ ์ผ๋ก datetime ํํ๋ก ์ง์ ํ๊ธฐ (0) | 2023.06.09 |
| [python] ๊ฒฐ์ธก๊ฐ ๋์ฒด/๋ณ๊ฒฝ (fillna) (0) | 2023.06.06 |
| [python] ๋์ ํฉ/๋์ ๊ณฑ (cumsum / cumprod) (0) | 2023.06.06 |
| [python] numpy ์์์ ์ฌ๋ฆผ, ๋ด๋ฆผ, ๋ฒ๋ฆผ (0) | 2023.05.23 |
fillna ๋ฉ์๋ : DataFrame์์ ๊ฒฐ์ธก๊ฐ์ ์ํ๋ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฉ์๋์ ๋๋ค.
์์
๋จผ์ 5x5 ๋ฐ์ดํฐํ๋ ์ ์์ฑ
col = ['col1','col2','col3','col4','col5']
row = ['row1','row2','row3','row4','row5']
na = np.nan
data = [[na, 2,na, 4,na],
[ 6, 7,na, 9,na],
[11,na,na,14,15],
[na,17,na,na,20],
[na,22,na,na,25]]
df = pd.DataFrame(data,row,col)
print(df)
col1 col2 col3 col4 col5
row1 NaN 2.0 NaN 4.0 NaN
row2 6.0 7.0 NaN 9.0 NaN
row3 11.0 NaN NaN 14.0 15.0
row4 NaN 17.0 NaN NaN 20.0
row5 NaN 22.0 NaN NaN 25.0
value์ ํ์์ ๋ฐ๋ฅธ ์ฌ์ฉ
value๊ฐ ์ซ์๋ ๋ฌธ์์ผ ๊ฒฝ์ฐ ๊ทธ๋๋ก ๊ฒฐ์ธก๊ฐ์ ๋์ฒดํ๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ A๋ก ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
print(df.fillna('A'))
col1 col2 col3 col4 col5
row1 A 2.0 A 4.0 A
row2 6.0 7.0 A 9.0 A
row3 11.0 A A 14.0 15.0
row4 A 17.0 A A 20.0
row5 A 22.0 A A 25.0
dictํํ๋ก ์ ๋ ฅํ ๊ฒฝ์ฐ ๊ฐ๊ฐ ๋ ์ด๋ธ๊ฐ์ ๋ํด ์ํ๋ ๊ฐ์ผ๋ก์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
dict = {'col1':'A', 'col2':'B', 'col3':'C', 'col4':'D', 'col5':'E'}
print(df.fillna(value=dict))
# print(df.fillna(dict))๋ ๊ฐ๋ฅ
col1 col2 col3 col4 col5
row1 A 2.0 C 4.0 E
row2 6.0 7.0 C 9.0 E
row3 11.0 B C 14.0 15.0
row4 A 17.0 C D 20.0
row5 A 22.0 C D 25.0
method์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
method์ธ์์ bfill์ ์ ๋ ฅํ ๊ฒฝ์ฐ ๊ฒฐ์ธก๊ฐ์ด ๋ฐ๋ก ์๋๊ฐ๊ณผ ๋์ผํ๊ฒ ์ค์ ๋ฉ๋๋ค.
โป df.backfill( )์ด๋ df.bfill( )๊ณผ ์์ ํ ๋์ผํ ๊ธฐ๋ฅ์ ์ํ
print(df.fillna(method='bfill'))
col1 col2 col3 col4 col5
row1 6.0 2.0 NaN 4.0 15.0
row2 6.0 7.0 NaN 9.0 15.0
row3 11.0 17.0 NaN 14.0 15.0
row4 NaN 17.0 NaN NaN 20.0
row5 NaN 22.0 NaN NaN 25.0
method์ธ์์ ffill์ ์ ๋ ฅํ ๊ฒฝ์ฐ ๊ฒฐ์ธก๊ฐ์ด ๋ฐ๋ก ์๊ฐ๊ณผ ๋์ผํ๊ฒ ์ค์ ๋ฉ๋๋ค.
โป df.pad( )๋ df.ffill( )๊ณผ ์์ ํ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
print(df.fillna(method='ffill'))
col1 col2 col3 col4 col5
row1 NaN 2.0 NaN 4.0 NaN
row2 6.0 7.0 NaN 9.0 NaN
row3 11.0 7.0 NaN 14.0 15.0
row4 11.0 17.0 NaN 14.0 20.0
row5 11.0 22.0 NaN 14.0 25.0
limit์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
limit์ธ์๋ ๊ฐ ๋ ์ด๋ธ๊ฐ์ ๋ํด์ ๊ฒฐ์ธก์น ๋ณ๊ฒฝ์ ์ํํ ํ์์ ๋๋ค. ํ ๊ธฐ์ค์ผ๊ฒฝ์ฐ ์ผ์ชฝ๋ถํฐ, ์ด ๊ธฐ์ค์ผ ๊ฒฝ์ฐ ์์์๋ถํฐ ์ํํฉ๋๋ค.
print(df.fillna('A', limit=2))
col1 col2 col3 col4 col5
row1 A 2.0 A 4.0 A
row2 6.0 7.0 A 9.0 A
row3 11.0 A NaN 14.0 15.0
row4 A 17.0 NaN A 20.0
row5 NaN 22.0 NaN A 25.0
downcast์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
downcast ์ธ์๋ฅผ 'infer'๋ก ์ค์ ํจ์ผ๋ก์จ float64ํํ๋ฅผ int64ํํ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
print(df.fillna(0, downcast='infer'))
col1 col2 col3 col4 col5
row1 0 2 0 4 0
row2 6 7 0 9 0
row3 11 0 0 14 15
row4 0 17 0 0 20
row5 0 22 0 0 25
inplace๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋ค๋ฅธ ํ์ด์ฌ ๊ฐ์ฒด์์์ ๋ง์ฐฌ๊ฐ์ง๋ก inplace๋ ์๋ณธ์ ๋ฎ์ด์์ฐ๋ ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
์ฆ df.fillna(0, inplace=True) ๋ df=df.fillna(0)๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
df.fillna('A', inplace=True)
print(df)
col1 col2 col3 col4 col5
row1 A 2.0 A 4.0 A
row2 6.0 7.0 A 9.0 A
row3 11.0 A A 14.0 15.0
row4 A 17.0 A A 20.0
row5 A 22.0 A A 25.0
์๋ณธ: https://wikidocs.net/153209
| [python] read_csv๋ก ๋ฐ์ดํฐ ๋ถ๋ฌ์ฌ ์ parse_dates ์ต์ ์ผ๋ก datetime ํํ๋ก ์ง์ ํ๊ธฐ (0) | 2023.06.09 |
|---|---|
| [python] ์ธ๋ฑ์ค๋ฅผ ์ด๋ก ๋ณํ (reset_index) (0) | 2023.06.06 |
| [python] ๋์ ํฉ/๋์ ๊ณฑ (cumsum / cumprod) (0) | 2023.06.06 |
| [python] numpy ์์์ ์ฌ๋ฆผ, ๋ด๋ฆผ, ๋ฒ๋ฆผ (0) | 2023.05.23 |
| [Matplotlib] python matplotlib ํ๊ธ ๊นจ์ง ํด๊ฒฐํ๊ธฐ (0) | 2023.03.26 |