νμ΄μ¬ λ§μ€ν°νκΈ° : Pandas
μλ³Έ κ²μκΈ: https://velog.io/@euisuk-chung/νμ΄μ¬-μκ°ν-λ§μ€ν°νκΈ°-Pandas
νλ€μ€(Pandas)λ?
νλ€μ€(Pandas)λ νμ΄μ¬ λ°μ΄ν° λΆμ λΌμ΄λΈλ¬λ¦¬ μ€ νλλ‘, λ°μ΄ν° μ‘°μ, μ μ , λΆμ, μκ°ν λ±μ μν λ€μν κΈ°λ₯μ μ 곡ν©λλ€. νλ€μ€λ μ리μ¦(Series)μ λ°μ΄ν°νλ μ(DataFrame)μ΄λΌλ μλ£νμ μ΄μ©νμ¬ λ°μ΄ν°λ₯Ό μ²λ¦¬ν©λλ€.
νλ€μ€ μ€μΉ
νλ€μ€λ₯Ό μ¬μ©νλ €λ©΄ λ¨Όμ μ€μΉκ° νμν©λλ€. νλ€μ€λ pipλ₯Ό μ΄μ©νμ¬ μ€μΉν μ μμ΅λλ€. ν°λ―Έλμμ λ€μ λͺ λ Ήμ΄λ₯Ό μ λ ₯νμ¬ νλ€μ€λ₯Ό μ€μΉν©λλ€.
1
$ pip install pandas
νλ€μ€ λ°μ΄ν° κ°μ²΄
DataFrame κ°μ²΄
DataFrame κ°μ²΄λ νκ³Ό μ΄λ‘ μ΄λ£¨μ΄μ§ 2μ°¨μ λ°μ΄ν°λ₯Ό λ€λ£¨κΈ° μν κ°μ²΄μ λλ€. μ΄μ κ°κ°μ λ³μλ₯Ό λνλ΄κ³ , νμ κ°κ°μ κ΄μΈ‘μΉλ₯Ό λνλ λλ€. DataFrame κ°μ²΄λ μ¬λ¬ κ°μ§ λ°©λ²μΌλ‘ μμ±ν μ μμ΅λλ€.
μμ±νκΈ°
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
# 리μ€νΈλ₯Ό μ¬μ©νμ¬ DataFrame κ°μ²΄ μμ±νκΈ°
import pandas as pd
data = [['A', 1], ['B', 2], ['C', 3]]
df = pd.DataFrame(data, columns=['col1', 'col2'])
print(df)
# μΆλ ₯ κ²°κ³Ό
# col1 col2
# 0 A 1
# 1 B 2
# 2 C 3
# λμ
λ리λ₯Ό μ¬μ©νμ¬ DataFrame κ°μ²΄ μμ±νκΈ°
data = {'col1': ['A', 'B', 'C'], 'col2': [1, 2, 3]}
df = pd.DataFrame(data)
print(df)
# μΆλ ₯ κ²°κ³Ό
# col1 col2
# 0 A 1
# 1 B 2
# 2 C 3
# CSV νμΌμ μ¬μ©νμ¬ DataFrame κ°μ²΄ μμ±νκΈ°
df = pd.read_csv('data.csv')
print(df)
μ ννκΈ°
DataFrame κ°μ²΄μμλ μ΄μ΄λ νμ μ ννμ¬ λ°μ΄ν°λ₯Ό μ‘°νν μ μμ΅λλ€.
1
2
3
4
5
6
7
# μ΄ μ ννκΈ°
df['col1']
df[['col1', 'col2']]
# ν μ ννκΈ°
df.loc[0]
df.loc[[0, 1, 2]]
μ‘°μνκΈ°
DataFrame κ°μ²΄μμλ λ°μ΄ν°λ₯Ό μΆκ°, μμ , μμ νλ λ± λ€μν μ‘°μμ μνν μ μμ΅λλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# μ΄ μΆκ°νκΈ°
df['col3'] = [4, 5, 6]
# μ΄ μμ νκΈ°
df.drop('col3', axis=1, inplace=True)
# ν μΆκ°νκΈ°
df.loc[3] = ['D', 4, 5]
# ν μμ νκΈ°
df.drop(3, inplace=True)
# μ΄ μ΄λ¦ λ³κ²½νκΈ°
df.rename(columns={'col1': 'new_col1'}, inplace=True)
Series κ°μ²΄
Series κ°μ²΄λ μΈλ±μ€μ κ°μΌλ‘ μ΄λ£¨μ΄μ§ 1μ°¨μ λ°μ΄ν°λ₯Ό λ€λ£¨κΈ° μν κ°μ²΄μ λλ€. Series κ°μ²΄λ DataFrame κ°μ²΄μμ μ΄μ μ ννμ¬ μΆμΆν μ μμ΅λλ€.
μμ±νκΈ°
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 리μ€νΈλ₯Ό μ¬μ©νμ¬ Series κ°μ²΄ μμ±νκΈ°
import pandas as pd
data = [1, 2, 3]
s = pd.Series(data, index=['a', 'b', 'c'])
print(s)
# μΆλ ₯ κ²°κ³Ό
# a 1
# b 2
# c 3
# dtype: int64
# λμ
λ리λ₯Ό μ¬μ©νμ¬ Series κ°μ²΄ μμ±νκΈ°
data = {'a': 1, 'b': 2, 'c': 3}
s = pd.Series(data)
print(s)
# μΆλ ₯ κ²°κ³Ό
# a 1
# b 2
# c 3
# dtype: int64
μ ννκΈ°
Series κ°μ²΄μμλ μΈλ±μ€λ μμΉλ₯Ό μ΄μ©νμ¬ λ°μ΄ν°λ₯Ό μ νν μ μμ΅λλ€
νλ€μ€ κΈ°λ³Έ μ¬μ©λ²
λ°μ΄ν° λΆλ¬μ€κΈ°
νλ€μ€μμλ λ€μν ννμ λ°μ΄ν°λ₯Ό λΆλ¬μ¬ μ μμ΅λλ€. λνμ μΈ λ°μ΄ν° νμμΌλ‘λ CSV, Excel, SQL λ±μ΄ μμ΅λλ€.
CSV νμΌ λΆλ¬μ€κΈ°
CSV(Comma-Separated Values) νμΌμ μΌνλ‘ κ΅¬λΆλ λ°μ΄ν°λ₯Ό μ μ₯νλ νμΌ νμμ
λλ€. νλ€μ€μμλ read_csv()
ν¨μλ₯Ό μ΄μ©νμ¬ CSV νμΌμ λΆλ¬μ¬ μ μμ΅λλ€.
1
2
3
4
import pandas as pd
# CSV νμΌ λΆλ¬μ€κΈ°
df = pd.read_csv('data.csv')
Excel νμΌ λΆλ¬μ€κΈ°
Excel νμΌμ μ€νλ λμνΈ νλ‘κ·Έλ¨μμ μμ±ν λ°μ΄ν°λ₯Ό μ μ₯νλ νμΌ νμμ
λλ€. νλ€μ€μμλ read_excel()
ν¨μλ₯Ό μ΄μ©νμ¬ Excel νμΌμ λΆλ¬μ¬ μ μμ΅λλ€.
1
2
3
4
import pandas as pd
# Excel νμΌ λΆλ¬μ€κΈ°
df = pd.read_excel('data.xlsx')
λ°μ΄ν° μ΄ν΄λ³΄κΈ°
λ°μ΄ν°λ₯Ό λΆλ¬μ¨ νμλ λ°μ΄ν°μ ꡬ쑰μ λ΄μ©μ μ΄ν΄λ³Ό νμκ° μμ΅λλ€. νλ€μ€μμλ λ€μκ³Ό κ°μ ν¨μλ₯Ό μ΄μ©νμ¬ λ°μ΄ν°λ₯Ό μ΄ν΄λ³Ό μ μμ΅λλ€.
λ°μ΄ν°νλ μ μ 보 νμΈνκΈ°
info()
ν¨μλ λ°μ΄ν°νλ μμ μ 보λ₯Ό μΆλ ₯ν©λλ€. λ°μ΄ν°νλ μμ ν¬κΈ°, λ°μ΄ν° νμ
, κ²°μΈ‘μΉ λ±μ μ 보λ₯Ό νμΈν μ μμ΅λλ€.
1
2
# λ°μ΄ν°νλ μ μ 보 νμΈνκΈ°
df.info()
λ°μ΄ν°νλ μ μΌλΆ λ°μ΄ν° 보기
head()
ν¨μλ λ°μ΄ν°νλ μμ 첫 nνμ μΆλ ₯ν©λλ€. nμ μΈμλ‘ μ λ¬λ μ μμ΅λλ€. κΈ°λ³Έκ°μ 5μ
λλ€.
1
2
# λ°μ΄ν°νλ μ μΌλΆ λ°μ΄ν° 보기
df.head()
λ°μ΄ν°νλ μ μμ½ ν΅κ³λ 보기
describe()
ν¨μλ λ°μ΄ν°νλ μμ μμ½ ν΅κ³λμ μΆλ ₯ν©λλ€. κ° μ΄μ κ°μ, νκ· , νμ€νΈμ°¨, μ΅μκ°, 25% λ°±λΆμμ, μ€μκ°, 75% λ°±λΆμμ, μ΅λκ° λ±μ μ 보λ₯Ό νμΈν μ μμ΅λλ€.
1
2
# λ°μ΄ν°νλ μ μμ½ ν΅κ³λ 보기
df.describe()
λ°μ΄ν° μ ννκΈ°
λ°μ΄ν°νλ μμμλ νΉμ ν μ΄μ΄λ νμ μ ννμ¬ λ°μ΄ν°λ₯Ό μ‘°νν μ μμ΅λλ€.
μ΄ μ ννκΈ°
νΉμ ν μ΄μ μ νν λλ λ°μ΄ν°νλ μμ μ΄ μ΄λ¦μ μ¬μ©ν©λλ€.
1
2
# μ΄ μ ννκΈ°
df['μ΄ μ΄λ¦']
μ¬λ¬ κ°μ μ΄μ μ νν λλ 리μ€νΈ ννλ‘ μ΄ μ΄λ¦μ μ λ¬ν©λλ€.
1
2
# μ¬λ¬ κ°μ μ΄ μ ννκΈ°
df[['μ΄ μ΄λ¦ 1', 'μ΄ μ΄λ¦ 2', ...]]
ν μ ννκΈ°
νΉμ ν νμ μ νν λλ loc[]
ν¨μλ₯Ό μ¬μ©ν©λλ€. loc[]
ν¨μλ νμ μ΄λ¦ λλ μΈλ±μ€λ₯Ό μ¬μ©νμ¬ νμ μ νν©λλ€.
1
2
# ν μ ννκΈ°
df.loc[ν μ΄λ¦ λλ μΈλ±μ€]
μ¬λ¬ κ°μ νμ μ νν λλ 리μ€νΈ ννλ‘ ν μ΄λ¦ λλ μΈλ±μ€λ₯Ό μ λ¬ν©λλ€.
1
2
# μ¬λ¬ κ°μ ν μ ννκΈ°
df.loc[[ν μ΄λ¦ λλ μΈλ±μ€ 1, ν μ΄λ¦ λλ μΈλ±μ€ 2, ...]]
λ°μ΄ν° νν°λ§νκΈ°
λ°μ΄ν°νλ μμμλ νΉμ ν 쑰건μ λ§μ‘±νλ λ°μ΄ν°λ§ μ ννμ¬ μ‘°νν μ μμ΅λλ€.
쑰건 νν°λ§νκΈ°
쑰건 νν°λ§μ []
μ°μ°μμ 쑰건μμ μ΄μ©νμ¬ μνν©λλ€.
1
2
# 쑰건 νν°λ§νκΈ°
df[쑰건μ]
μλ₯Ό λ€μ΄, 2010λ μ΄νμ λ°μ΄ν°λ§ μ ννκ³ μΆμ λλ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€.
1
2
# 2010λ
μ΄νμ λ°μ΄ν°λ§ μ ννκΈ°
df[df['Year'] >= 2010]
λ Όλ¦¬ μ°μ°μ μ΄μ©νκΈ°
&
(and)μ |
(or) μ°μ°μλ₯Ό μ΄μ©νμ¬ λ
Όλ¦¬ μ°μ°μ μνν μ μμ΅λλ€.
1
2
3
# λ
Όλ¦¬ μ°μ°μ μ΄μ©νκΈ°
df[(쑰건μ 1) & (쑰건μ 2)]
df[(쑰건μ 1) | (쑰건μ 2)]
μλ₯Ό λ€μ΄, 2010λ μ΄νμ΄λ©΄μ κΈλ©λ¬ μ΄μμ νλν λ°μ΄ν°λ§ μ ννκ³ μΆμ λλ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€.
1
2
# 2010λ
μ΄νμ΄λ©΄μ κΈλ©λ¬ μ΄μμ νλν λ°μ΄ν°λ§ μ ννκΈ°
df[(df['Year'] >= 2010) & (df['Medal'] == 'Gold')]
isin() ν¨μ μ΄μ©νκΈ°
isin()
ν¨μλ₯Ό μ΄μ©νμ¬ νΉμ ν κ°μ΄ ν¬ν¨λ λ°μ΄ν°λ§ μ νν μ μμ΅λλ€.
1
2
# isin() ν¨μ μ΄μ©νκΈ°
df[df['μ΄ μ΄λ¦'].isin([κ°1, κ°2, ...])]
μλ₯Ό λ€μ΄, βKORβ, βUSAβ, βJPNβ κ΅κ°μ λ°μ΄ν°λ§ μ ννκ³ μΆμ λλ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€.
1
2
# 'KOR', 'USA', 'JPN' κ΅κ°μ λ°μ΄ν°λ§ μ ννκΈ°
df[df['NOC'].isin(['KOR', 'USA', 'JPN'])]
λ°μ΄ν° κ·Έλ£ΉννκΈ°
λ°μ΄ν°νλ μμμλ νΉμ ν κΈ°μ€μ λ°λΌ λ°μ΄ν°λ₯Ό κ·Έλ£Ήννμ¬ μ²λ¦¬ν μ μμ΅λλ€.
groupby() ν¨μ μ΄μ©νκΈ°
groupby()
ν¨μλ₯Ό μ΄μ©νμ¬ νΉμ ν μ΄μ κΈ°μ€μΌλ‘ λ°μ΄ν°λ₯Ό κ·Έλ£Ήνν μ μμ΅λλ€.
1
2
# groupby() ν¨μ μ΄μ©νκΈ°
df.groupby('μ΄ μ΄λ¦')
groupby()
ν¨μλ‘ κ·Έλ£Ήνν λ°μ΄ν°λ κ° κ·Έλ£Ήμ λν μ 보λ₯Ό λ΄κ³ μλ κ°μ²΄μ
λλ€. μ΄λ₯Ό λ°νμΌλ‘ λ€μν μ²λ¦¬λ₯Ό μνν μ μμ΅λλ€.
μ§κ³ ν¨μ μ΄μ©νκΈ°
κ·Έλ£Ήνλ λ°μ΄ν°μ λν΄ μ§κ³ ν¨μλ₯Ό μ΄μ©νμ¬ λ€μν μ²λ¦¬λ₯Ό μνν μ μμ΅λλ€.
1
2
# μ§κ³ ν¨μ μ΄μ©νκΈ°
κ·Έλ£Ήνλ λ°μ΄ν°.μ§κ³ν¨μ()
κ·Έλ£Ήνλ λ°μ΄ν°μ λν΄ μ μ©ν μ μλ μ§κ³ ν¨μλ λ€μν©λλ€. μΌλ°μ μΌλ‘ μ¬μ©λλ μ§κ³ ν¨μλ λ€μκ³Ό κ°μ΅λλ€.
count()
: λ°μ΄ν°μ κ°μλ₯Ό μΈλ ν¨μsum()
: λ°μ΄ν°μ ν©μ ꡬνλ ν¨μmean()
: λ°μ΄ν°μ νκ· μ ꡬνλ ν¨μmedian()
: λ°μ΄ν°μ μ€μκ°μ ꡬνλ ν¨μmin()
: λ°μ΄ν°μ μ΅μκ°μ ꡬνλ ν¨μmax()
: λ°μ΄ν°μ μ΅λκ°μ ꡬνλ ν¨μstd()
: λ°μ΄ν°μ νμ€νΈμ°¨λ₯Ό ꡬνλ ν¨μvar()
: λ°μ΄ν°μ λΆμ°μ ꡬνλ ν¨μ
1
2
3
4
5
6
7
8
9
# μ§κ³ ν¨μ μ΄μ©νκΈ°
κ·Έλ£Ήνλ λ°μ΄ν°.count()
κ·Έλ£Ήνλ λ°μ΄ν°.sum()
κ·Έλ£Ήνλ λ°μ΄ν°.mean()
κ·Έλ£Ήνλ λ°μ΄ν°.median()
κ·Έλ£Ήνλ λ°μ΄ν°.min()
κ·Έλ£Ήνλ λ°μ΄ν°.max()
κ·Έλ£Ήνλ λ°μ΄ν°.std()
κ·Έλ£Ήνλ λ°μ΄ν°.var()
μλ₯Ό λ€μ΄, κ΅κ°λ³ κΈλ©λ¬ μμ ν©κ³λ₯Ό ꡬνκ³ μΆμ λλ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€.
1
2
# κ΅κ°λ³ κΈλ©λ¬ μμ ν©κ³ ꡬνκΈ°
df[df['Medal'] == 'Gold'].groupby('NOC')['Medal'].count()
λ°μ΄ν° μ λ ¬νκΈ°
λ°μ΄ν°νλ μμμλ νΉμ ν μ΄μ κΈ°μ€μΌλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λλ©°, λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ €λ©΄ ascending=False
μ΅μ
μ μΆκ°ν©λλ€.
1
2
3
4
5
# μ€λ¦μ°¨μμΌλ‘ μ λ ¬νκΈ°
df.sort_values('μ΄ μ΄λ¦')
# λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νκΈ°
df.sort_values('μ΄ μ΄λ¦', ascending=False)
μλ₯Ό λ€μ΄, μλμ κ°μ λ°μ΄ν°νλ μμ΄ μλ€κ³ κ°μ ν΄ λ΄ μλ€.
1
2
3
4
5
6
7
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'city': ['New York', 'Paris', 'London', 'San Francisco']}
df = pd.DataFrame(data)
print(df)
1
2
3
4
5
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 David 47 San Francisco
μ΄μ λμ΄λ₯Ό κΈ°μ€μΌλ‘ λ°μ΄ν°λ₯Ό μ λ ¬ν΄ λ³΄κ² μ΅λλ€.
1
df.sort_values('age')
1
2
3
4
5
name age city
2 Charlie 18 London
0 Alice 25 New York
1 Bob 32 Paris
3 David 47 San Francisco
Index μ΄κΈ°ννκΈ°
λ°μ΄ν°νλ μμμλ reset_index()
ν¨μλ₯Ό μ΄μ©νμ¬ μΈλ±μ€λ₯Ό μ΄κΈ°νν μ μμ΅λλ€. μ΄λ κΈ°μ‘΄ μΈλ±μ€λ μ΄λ‘ μΆκ°λ©λλ€.
1
2
# μΈλ±μ€ μ΄κΈ°ννκΈ°
df.reset_index()
μλ₯Ό λ€μ΄, μλμ κ°μ λ°μ΄ν°νλ μμ΄ μλ€κ³ κ°μ ν΄ λ΄ μλ€.
1
2
3
4
5
6
7
8
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'city': ['New York', 'Paris', 'London', 'San Francisco']}
df = pd.DataFrame(data)
df.set_index('name', inplace=True)
print(df)
1
2
3
4
5
6
age city
name
Alice 25 New York
Bob 32 Paris
Charlie 18 London
David 47 San Francisco
μ΄μ μΈλ±μ€λ₯Ό μ΄κΈ°νν΄ λ³΄κ² μ΅λλ€.
1
df.reset_index()
1
2
3
4
5
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 David 47 San Francisco
κ²°λ‘
λ λ§μ λ°μ΄ν° λΆμ κΈ°λ₯κ³Ό κΈ°λ²μ΄ μμ§λ§, κΈ°λ³Έμ μΈ λ΄μ©μ λ€λ£¨λ κ²μ΄κΈ° λλ¬Έμ μ΄μμΌλ‘ κΈ°λ³Έμ μΈ νλ€μ€ μ¬μ©λ²μ λν΄ μμ보μμ΅λλ€. νλ€μ€λ λ§€μ° λ€μν κΈ°λ₯μ μ 곡νκΈ° λλ¬Έμ ν λ²μ λͺ¨λ λ΄μ©μ μ΅νκΈ°λ μ΄λ ΅μ§λ§, μμ£Ό μ¬μ©νλ κΈ°λ₯μ μλ¬νκ³ , νμν λλ§λ€ κ²μνμ¬ μ¬μ©νλ©΄ νλ€μ€λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
μ΄μΈμλ μμΌλ‘ μ΄ν΄λ³Ό λ°μ΄ν° μκ°νλ₯Ό μν matplotlib
, seaborn
, κ·Έλ¦¬κ³ μμμ μ΄ν΄λ³Έ λ°μ΄ν° μ μ²λ¦¬λ₯Ό μν numpy
λ± λ€μν λΌμ΄λΈλ¬λ¦¬λ€μ΄ μμΌλ, νμν κΈ°λ₯μ λ§κ² μ μ ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° λΆμμ μνν΄ λ³΄μκΈ° λ°λλλ€.