데이터프레임 중심 프로그래밍
1. 기본 설정
1-1. 시리즈(Series)
- 1차원 데이터 구조로, 인덱스와 값(value)으로 구성됨.
- 리스트, 딕셔너리, 넘파이 배열 등을 활용하여 생성 가능.
1-2. 데이터프레임(DataFrame)
- 2차원 데이터 구조로, 여러 개의 시리즈가 모여 만들어짐.
- 행(row)과 열(column)로 구성됨.
- 딕셔너리, 리스트, 넘파이 배열 등을 활용하여 생성 가능.
2. 시리즈 산술연산
- 시리즈 간의 산술연산은 같은 인덱스를 기준으로 수행됨.
- 연산 대상이 없는 인덱스 값은 NaN(결측치)로 처리됨.
예제 (덧셈)
import pandas as pd
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([5, 15, 25], index=['b', 'c', 'd'])
result = s1 + s2
print(result)
a NaN
b 25.0
c 45.0
d NaN
dtype: float64
예제 (뺄셈)
result = s1 - s2
print(result)
a NaN
b 5.0
c 5.0
d NaN
dtype: float64
예제 (곱셈)
result = s1 * s2
print(result)
a NaN
b 300.0
c 750.0
d NaN
dtype: float64
예제 (나눗셈)
result = s1 / s2
print(result)
a NaN
b 1.333333
c 1.2
d NaN
dtype: float64
- ‘a’와 ‘d’는 대응되는 값이 없어 NaN(결측치)로 표시됨.
3. 데이터프레임 산술연산
- 같은 열(column)과 같은 행(index)을 기준으로 연산이 수행됨.
- 대응되는 값이 없으면 NaN(결측치)로 처리됨.
예제 (덧셈)
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [10, 20, 30], 'C': [40, 50, 60]})
result = df1 + df2
print(result)
A B C
0 11.0 NaN NaN
1 22.0 NaN NaN
2 33.0 NaN NaN
예제 (뺄셈)
result = df1 - df2
print(result)
A B C
0 -9.0 NaN NaN
1 -18.0 NaN NaN
2 -27.0 NaN NaN
예제 (곱셈)
result = df1 * df2
print(result)
A B C
0 10.0 NaN NaN
1 40.0 NaN NaN
2 90.0 NaN NaN
예제 (나눗셈)
result = df1 / df2
print(result)
A B C
0 0.1 NaN NaN
1 0.1 NaN NaN
2 0.1 NaN NaN
- ‘B’와 ‘C’ 열은 상대 데이터프레임에 없어서 NaN으로 표시됨.
4. 연산과 결측치
- 연산 시 NaN(결측치)이 포함되면 결과값도 NaN이 됨.
- 결측치를 처리하기 위한 메소드 활용 가능.
자주 사용되는 연산 메소드
| 메소드 | 설명 |
|---|
| add() | 덧셈(+) 수행 |
| sub() | 뺄셈(-) 수행 |
| mul() | 곱셈(*) 수행 |
| div() | 나눗셈(/) 수행 |
| fillna() | NaN 값을 특정 값으로 대체 |
| dropna() | NaN 값을 포함한 행/열 제거 |
예제 (fillna 활용)
result = df1.add(df2, fill_value=0)
print(result)
A B C
0 11.0 4.0 40.0
1 22.0 5.0 50.0
2 33.0 6.0 60.0
5. 브로드캐스팅
- 차원이 다른 데이터 간 연산을 자동으로 확장하여 수행하는 기능.
5-1. 차원 맞추기
- 데이터프레임과 시리즈 간 연산 시 자동으로 차원이 맞춰짐.
5-2. 데이터프레임과 시리즈 간 연산
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
s = pd.Series([10, 20, 30])
result = df + s
print(result)
A B
0 11 14
1 22 25
2 33 36
5-3. 공통 인덱스 존재 시
s = pd.Series([10, 20], index=['A', 'B'])
result = df + s
print(result)
A B
0 11 24
1 12 25
2 13 26
5-4. axis=0 또는 axis='index' 적용
result = df.add(s, axis=0)
print(result)
A B
0 11 24
1 12 25
2 13 26
- axis=0을 지정하면 행(row) 방향으로 브로드캐스팅이 적용됨.