Python Pandas
Pyrhon์ผ๋ก ๋ฐ์ดํฐ๋ถ์์ ์ ํด๋ณธ๋ค๋ฉด Python Pandas๋ ์ ๋๋ก ๋น ์ง ์ ์๋ ๋ชจ๋์ ๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ Pandas์ Dataframe๊ณผ Series๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ถ์์ ํ๊ณ ์ถ๋ค๋ฉด ๊ผญ ์์๋์ด์ผํ ๋ชจ๋์ ๋๋ค. ์ค๋ก์ง ๋ฐ์ดํฐ ๋ถ์ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ง๋ค์ด ๋์ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ Dataframe์ผ๋ก ์ฃผ๋ ๊ฒฝ์ฐ๋ ๋ง๊ธฐ ๋๋ฌธ์ ์ด์ฉ๋ฉด Python ์ฌ์ฉ์๋ผ๋ฉด ํ์๋ก ์๊ณ ๋์ด๊ฐ์ผํ๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Python์ ์๋ฃ๊ตฌ์กฐ๊ฐ ์๋๊ฒ ์ฅ์ ์ด์ ๋จ์ ์ธ ์ธ์ด๋ผ๊ณ ํ๋๋ฐ... Python์์ ๋ค๋ฃจ๋ ์๋ฃํ์ด ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ฌ๋ฆฌ, ์ ์ฝ์ด ๋ง์ด ์๊ณ ์์ ๋ก์์ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ค์๊ฒ ํผ๋์ ์ค์๋ ์์ง๋ง, ์๋ก์ด ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ํ์ ์ ์ผ๋ก ๋ฐ๋ผ๋ณผ ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋ ์๋ฐ๋ ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ฉํ๋ Map, Array ๋ฑ๋ฑ ์ด๋ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฝ๊ธฐ ํธํ๊ฒ ํฉ์ณ๋์๊ฒ Python Pandas์ ๊ฐ์ ์ด๋ผ๊ณ ํด์ผํ ๊น์?
๋๋ฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฑฐ๋, ๋ง์น ์์ ์ ์ํธ๋ฅผ ํ๋์ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋ง๋ค์ด ๋์ ๋๋์ ๋๋ค. ๊ทธ๋์ ์ค๋์ Python Pandas์์ DataFrame๊ณผ Series๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ด์ฉ์ ๋ค๋ค๋ณผ๊น ํฉ๋๋ค. Dataframe์ ์์ฑํ๊ฑฐ๋ ์ฝ๋ ๋ฐฉ๋ฒ์ด ์๋ ๋ค์ํด์... ํ๋์ ๊ธ์ ์ ์ฒด์ ์ผ๋ก ์ ๋ฆฌํ๋ฉด ์กฐ๊ธ ๋ ์ฝ๊ฒ Python Pandas ๋ชจ๋์ Dataframe์ ์ ๊ทผํ ์ ์์ง ์์๊น ํ๋ ์๊ฐ์ผ๋ก ์ค์ต์ ์งํํด ๋ณด๊ฒ ์ต๋๋ค.
import pandas as pd
Python Pandas๋ Anaconda๋ฅผ ํตํด์ Python์ ์ค์นํ๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋์ด ์ค์น๋์๊ณ ์๋ค๋ฉด pip๋ฅผ ํตํด์ ์ค์นํด์ฃผ์ด์ผํฉ๋๋ค.
๊ด๋ก์ ์ผ๋ก pd๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ธํฉ๋๋ค.
Series
Series๋ ํ ์ด๋ธ ํ์์ ๋ฐ์ดํฐ๋ก ๋ดค์๋ ํ๋์ ๋ ์ฝ๋ ์ฆ, ํ ๊ฐ์ผ๋ก ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
-Series ์์ฑ
s1 = pd.Series([5000,30000,20000,15000])
Series์ Dataframe์ ๊ฐ๊ณ ๊ฐ๋ฐ์ ํ ๋ ์ ๋ง ํ๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์์ด์. Series๋ ํ ๊ฐ์ธ๋ฐ ์ถ๋ ฅ์ ์ธ๋ก๋ก ๋์ฃ ?
๊ทธ๋ฆฌ๊ณ index ๊ฐ์ผ๋ก 0 ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ธ๋ฑ์ฑ๋๋๊ฒ ๋ง์น Series ํ๋๋ฅผ ๋ง๋ค์๋๋ฐ ํ๋์ ํ ์ด๋ธ๋ก ๋ณด์ ๋๋ค. Series๋ ํ ๋ฐ์ดํฐ๋ผ๋ ๊ฒ์ ๋ช ์ฌํ๊ณ ๊ฐ๋ฐ์ ํด์ผํฉ๋๋ค.
s1 = pd.Series({
'2020-03-03' : 5000,
'2020-03-04' : 30000,
'2020-03-05' : 20000,
'2020-03-06' : 15000,
})
dictionary ํ์์ผ๋ก๋ก index์ ์ค์ ํ๋ฉด์ ๋์์ ์์ฑ๋ ๊ฐ๋ฅํฉ๋๋ค.
--Series index & names ๋ฐ๋ก ์ง์
s1.index = ('2020-03-03','2020-03-04','2020-03-05', '2020-03-06')
s1.index.name = 'dates'
s1.name = 'durian'
Series์ index ๋ถ๋ถ์ ๊ฐ ๋ฐ์ดํฐ์ ๋ํ ์ด ์์ฑ์ ๋๋ค.
index์ name์ ํ์ธ์ฉ์ผ๋ก index์ ์๋ฏธ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ง์ ํด์ฃผ๊ณ
Series ์ ์ฒด์ name์ ํ๋์ ํ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ํ์ ๋ํํ๋ ๊ฐ์ ๋๋ค.
๋์ค์ Dataframe์ ์ฝ์ ํ ๋ name ์์ฑ์ ํ์๋ก ์๊ตฌ๋ฉ๋๋ค.
ํด๋น Series๋ฅผ ๋ณด๋ฉด durian์ ๊ฐ ๋ ์ง๋ณ ๊ฐ๊ฒฉ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
--Series index & namesํจ๊ป ์์ฑ
s1 = pd.Series([5000,30000,20000,15000],
index=['2020-03-03','2020-03-04','2020-03-05', '2020-03-06'],
name='durian')
s1.index.name = 'dates'
index_name ๊ฐ์ ์์ฑ ์ธ์๋ก ๋ฐ์ง ์์ ๋ฐ๋ก ๋ฃ์ด์คฌ์ต๋๋ค.
-Series ์ฝ๊ธฐ
Series ์ฝ๊ธฐ ์์ ์ ์์ ์์ฑ๋ s1 Series๋ฅผ ๊ฐ๊ณ ์ค์ตํ๊ฒ ์ต๋๋ค.
--Series ์์ index๋ก ์ฝ๊ธฐ
s1[0]
Series๋ ์ผ์ฐจ ๋ฐฐ์ด ํ์์ ํ ๋ฐ์ดํฐ์ด๋ฏ๋ก ์ซ์ ํํ์ index๋ก ๋ฐ์์ฌ ์ ์์ต๋๋ค.
๋จ, ๋ง์ฝ indexing ์์ ์ ํ ์คํธ๊ฐ ์๋ ์ซ์๋ก ํ์ ๊ฒฝ์ฐ, ํด๋น ์ซ์ ๋ด์ index์์๋ง ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ฒ ์์ ์์๋ ๊ฐ๊ฐ ๋ ์ง๋ฅผ ์ฌ์ฉํด์ indexing์ ํด์คฌ๊ธฐ ๋๋ฌธ์ '0'์ผ๋ก ํธ์ถ์ด ๊ฐ๋ฅํ์ต๋๋ค.
--Series index ์ด๋ฆ์ผ๋ก ์ฝ๊ธฐ
s1['2020-03-03']
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ดํ์์ผ๋ก ์ฝ์ ์ ์์ต๋๋ค.
๋ง์ฝ, index๊ฐ ์ซ์๊ฐ ๋ณดํจ๋์ง ์์ ๋จ์ดํํ๋ก ๋์ด์์ผ๋ฉด
s1.word
'.'๊ณผ index๋ก ์ค์ ํ ๋ช ์นญ์ผ๋ก ํธ์ถํ ์ ์์ต๋๋ค.
s1[['2020-03-03','2020-03-04']]
๋ฐฐ์ด ํํ๋ก 2๊ฐ์ด์์ index๋ฅผ ํธ์ถํ๋ฉด Series ํ์ ์ผ๋ก ๊ฐ์ ์ค๋๋ค.
slicing์์ ์ ํตํด ๋ถ๋ฅผ ์ ์์ต๋๋ค.
Dataframe
Dataframe์ Series๋ค์ ์งํฉ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
์ฌ๋ฌ๊ฐ์ Series(ํ)์ด ๋ชจ์ฌ ํ๋์ ํ ์ด๋ธํ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
-Dataframe ์์ฑ
df = pd.DataFrame(
[
[4000,20000,10000],
[5000,8000,11000],
[6000,9000,12000]
],
)
index ๊ฐ๊ณผ column ๊ฐ ์์ด ์์ฑํ๊ฒ ๋๋ฉด ์ซ์ํํ๋ก 0 ๋ถํฐ ์๋์ผ๋ก ๋งค๊ฒจ์ง๋๋ค. Dataframe์ ์ ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด index์ column ๊ฐ์ ๋ฃ์ด์ ์์ฑ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
df = pd.DataFrame({
"2020-03-03" : [4000,5000,6000],
"2020-03-04" : [20000,8000,9000],
"2020-03-05" :[10000,11000,12000]
}, index=['apple','bannana','cherry']
)
dictionary ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. dictionary ํํ๋ก ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด, key ๊ฐ์ด ๊ฐ column์ด ๋๊ณ value ๊ฐ์ด ๊ฐ์ด ๋ฉ๋๋ค. index๋ฅผ ์ ๋ฃ์ด์ฃผ๋ฉด ์ซ์ํํ๋ก ๋๋ ์ํ๋ ํํ๋ก index ๊ฐ์ ๋ฃ์ด๋ดค์ต๋๋ค.
--Dataframe index & column ๋ฐ๋ก ๋ฃ๊ธฐ
df = pd.DataFrame(
[
[4000,20000,10000],
[5000,8000,11000],
[6000,9000,12000]
],
)
df.index = [['apple','bannana','cherry']]
df.columns = [['2020-03-03','2020-03-04','2020-03-05']];
Dataframe์ ์์ฑํ๋๋ฐ๋ index์ column์ ๋ฐ๋ก๋ฐ๋ก ์ค์ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
--Dataframe index & column ํจ๊ป ์์ฑ
df = pd.DataFrame(
[
[4000,20000,10000],
[5000,8000,11000],
[6000,9000,12000]
],
index=['apple','bannana','cherry'],
columns=['2020-03-03','2020-03-04','2020-03-05']
)
index์ column์ ๋ฐ๋ก ๋ฃ์ด์ค ๊ฒ์ฒ๋ผ ์์๋ค ์ธ์๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
--Dataframe Series๋ก ์์ฑ
s1 = pd.Series(
[4000,20000,10000],
index = ['2020-03-03', '2020-03-04', '2020-03-05'],
name='apple')
s2 = pd.Series(
[5000,8000,11000],
index = ['2020-03-03', '2020-03-04', '2020-03-05'],
name='bannana')
s3 = pd.Series(
[6000,9000,12000],
index = ['2020-03-03', '2020-03-04', '2020-03-05'],
name='cherry')
df = pd.DataFrame([s1,s2,s3])
์์์ ์ค๋ช ํ๋ฏ์ด Dataframe์ Series๋ค๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธํํ์ ๊ตฌ์กฐ๋ผ๊ณ ํ์ต๋๋ค. 3๊ฐ์ Series๋ฅผ ๋ง๋ค์ด์ ํ๋์ Dataframe์์ ๋ฃ์ด ๋ง๋ค์์ต๋๋ค. ์ด์ ์๋ Series์ index๋ name ๊ทธ๋ฆฌ๊ณ Dataframe์ index์ column์ด ๋ง์ด ํ๊ฐ๋ ธ์ ์๋ ์์ง๋ง, ์ ์์ ๋ฅผ ์ ๋ณด๋ฉด ๋๊ฐ์ ๊ตฌ๋ถ๊ณผ ์ดํดํ๋๋ฐ ๋ง์ ๋์์ด ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Dataframe ์์ฑ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ์กฐ๊ธ ์์ง๋ง, ๋ ํ์คํ ์ดํด๋ฅผ ์ํด ํด๋น Dataframe ์์ Series ๋ฐ์ดํฐ๋ฅผ ํ๋ ๋ ๋ฃ์ด๋ณด๋ ๊ฒ์ ํด๋ณด๊ฒ ์ต๋๋ค.
s4 = pd.Series(
[5000,30000,20000,15000],
index=['2020-03-03','2020-03-04','2020-03-05', '2020-03-06'],
name='durian'
)
df.append(s4)
durian์ด๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์์ต๋๋ค. Series์ name๊ฐ์ด Dataframe์ index๋ก ์ฌ์ฉ๋๋๋ฐ ์ด๋ฒ์๋ 3๊ฐ๊ฐ ์๋ 4๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ดค์ต๋๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ ์ธ์ด๋ผ๋ฉด ์๋ฌ๊ฐ๋ฐ์ํ๊ณ ๋ง ๊ทธ๋ฌ์ํ ๋ฐ, ํ์ด์ฌ์ ์ฅ์ ์ด์ ๋จ์ ?์ผ๋ก ๋ค๋ฅธ ๊ฐ์ NaN์ผ๋ก ์ฒ๋ฆฌ๊ฐ๋๊ณ ์๋ฌ๋ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ๋ฐ์ดํฐ๊น์ง ํ๋ ๋ ์ถ๊ฐํด๋ณด๋๊น ํ์คํ Series์ Dataframe์ ๊ตฌ์กฐ๊ฐ ์ดํด๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
-Dataframe ์ฝ๊ธฐ
์ด๋ฒ์๋ Dataframe์ ๊ฐ์ ์ฝ์ด๋ณด๋ ์ค์ต์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
Dataframe ์ฝ๋ ๋ฐฉ๋ฒ์ ๋๋ฌด๋๋ ๋ค์ํด์ Dataframe ์ ๋ณด ์ฝ๊ธฐ, ํ ์ฝ๊ธฐ, ์ด ์ฝ๊ธฐ, ํ ์ซ์ index ์ฝ๊ธฐ, ๋ณตํฉ ์ฝ๊ธฐ ์ด๋ ๊ฒ 5๊ฐ์ง๋ก ๋๋ ์ ๋ด์ผํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด๋ถ๋ถ์ด ์ ์ผ ์ค์ํ ๋ถ๋ถ์ด๊ธฐ๋ ํฉ๋๋ค.
--Dataframe ์ ๋ณด ์ฝ๊ธฐ
df.index
df.columns
df.values
df.describe()
๊ฐ๊ฐ Dataframe์ index, column, ๊ฐ, ์์ฝ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋ง์ง๋ง describe ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ค์ ๊ธ์์ Dataframe ํต๊ณ์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ค๋ฃจ๊ธฐ ์ ์ ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ด ์๋ค๋ ๊ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ณ ์ถ์ด ๋ฃ์ด๋ดค์ต๋๋ค.
๋๋จธ์ง index, columns๋ values๋ฅผ ํ์ฉํด์ ๋ฐ๋ณต๋ฌธ์ ํตํด ์ด๋ค ํน์ ์์ ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ๋๋ฆด๋ ค๊ณ Dataframe์ ๋ํ ์ ๋ณด๋ค์ ์ฝ๋ ๋ฐฉ๋ฒ์ ์ค์ต์ ์ถ๊ฐํ์ต๋๋ค.
--Dataframe ์ด ์ฝ๊ธฐ
df['2020-03-03']
Dataframe์ ์ด ์ฆ column์ ์ฝ๋ ๊ฒ์ ๋ฐฐ์ด์ ์ฝ๋ ๋ฐฉ์์ด๋ ๋๊ฐ์ด ์ฌ์ฉํ๋ฉด๋ฉ๋๋ค.
column์ ๋ ์ธ๋ถ์ ์ธ ๋ฐ์ดํฐ๋ 2์ฐจ์ ๋ฐฐ์ด์ ์ฝ๋ฏ์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
--Dataframe ํ ์ฝ๊ธฐ
df.loc['apple']
Dataframe์ ํ ์ฆ index๋ก ์ฝ๋ ๊ฒ์ dataframe์ loc๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค.
--Dataframe ํ ์ซ์ index ์ฝ๊ธฐ
df.iloc[0]
iloc๋ฅผ ์ด์ฉํด์ index์ ์ซ์ index๋ก ์ฝ์ด์ฌ ์ ์์ต๋๋ค.
--Dataframe ๋ณตํฉ ์ฝ๊ธฐ
df.loc['apple':'cherry', '2020-03-04':'2020-03-05']
๋ณตํฉ์ฝ๊ธฐ๋ผ๊ณ ํํํ๋๋ฐ, ๊ทธ๋ฅ ํ๊ณผ์ด์ ์ ํํด์ ์ฝ์ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. python slicing ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ loc์ ์ฒซ๋ฒ์งธ์ index๋ฅผ ๋๋ฒ์งธ์ column์ ๋ฃ์ด์ ์ํ๋ ๋ถ๋ถ๋ง ํ์ธํ ์ ์๋ ๋ณตํฉ์ฝ๊ธฐ ๋ฐฉ๋ฒ์ ๋๋ค.
df.loc[df['2020-03-03']>4000,:]
df[df['2020-03-03':]>4000]
์ด๋ฐ ๋ฐฉ์๋ค๋ก ์กฐ๊ฑด์ ๋ฃ์ด์ Dataframe์ ๊ฐ๊ณตํ ์๋ ์์ต๋๋ค.
์ค๋์ Python Pandas Series์ Dataframe ์์ฑ๊ณผ ์ฝ๋ ๋ฐฉ๋ฒ์ ์์๋ดค์ต๋๋ค. ์์ฑ๊ณผ ์ฝ๋ ๋ฐฉ๋ฒ๋ง ์์๋ณด๋๋ฐ๋ ๋ง์ ๊ธ์ ์ฐ๊ฒ๋์๋ค์... ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ Dataframe์ ์ฝ๊ณ ์์ฑํ ์ ์์ต๋๋ค. ํนํ ์ฝ๋ ๋ฐฉ๋ฒ์ ์ ๊ฐ ์๋ดํด๋๋ฆฐ ๋ฐฉ๋ฒ ์ธ๋ก๋ ์ ํ์ฉํ๋ฉด ์ํ๋ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ค์ ๊ธ์์๋ ๋ฐ์ดํฐ ์ฝ์ ๊ณผ ์์ ๋ฑ Python Pandas๋ฅผ ์ด์ฉํ Dataframe์ ๊ฐ๊ณต๊ณผ ๊ด๋ จํด์ ๋ ์์๋ณด๊ฒ ์ต๋๋ค.
๋๊ธ