판다스는 엑셀의 파이썬 버전!
| 범주 | 기능 |
|---|---|
| 구조 | Series, DataFrame |
| 입출력 | read / to |
| 선택 | loc / iloc |
| 정제 | 결측, 타입 |
| 변환 | apply, map |
| 집계 | groupby |
| 결합 | merge, concat |
| 시계열 | rolling, ewm |
| 범주형 | category |
| 요약 | describe |
표 = DataFrame
import pandas as pd
users = [
['철수', 180, 5],
["민수", 170, 5],
["짱구", 130, 5]
]
dfUsers = pd.DataFrame(users)
dfUsers
0 1 2
0 철수 180 5
1 민수 170 5
2 짱구 130 5
users = {
"name" : ['철수', "민수", "짱구"],
"height" : [180, 170, 130],
"age" : [25, 30, 5]
}
dfUsers = pd.DataFrame(users)
dfUSers
name height age
0 철수 180 25
1 민수 170 30
2 짱구 130 5
users = [
{"name" : "철수", "height" : 180, "age" : 25},
{"name" : "민수", "height" : 170, "age" : 30},
{"name" : "짱구", "height" : 130, "age" : 5}
]
users
dfUsers = pd.DataFrame(users)
dfUsers
name height age
0 철수 180 25
1 민수 170 30
2 짱구 130 5
df.add(other, axis='columns', level=None, fill_value=None)
df.sub(other, axis='columns', level=None, fill_value=None)
df.mul(other, axis='columns', level=None, fill_value=None)
곱셈에서 fillvalue를 0으로 하는 경우, 값들이 전부 0이 되버리므로 그냥 fill_value를 쓰지 않는다 (가장 일반적)
대신 fill_value=1을 사용하는 경우가 있고, 아래와 같이 쓰는 경우가 있다.
df1.mul(df2).fillna(0)
df.div(other, axis='columns', level=None, fill_value=None)
판다스에서 div로 0으로 나누면 -> 에러가 아니라 inf(infinity) 또한 NaN이 나온다.
IEEE 754 부동소수점 규칙
| 계산 | 결과 |
|---|---|
양수 / 0 | inf |
음수 / 0 | -inf |
0 / 0 | NaN |
NaN / 0 | NaN |
실무에서 사용하는 패턴:
result = df1.div(df2)
result = result.replace([np.inf, -np.inf], np.nan)
#혹은
df1.div(df2.where(df2 != 0))
axis=0 또는 'index' - 행 기준 (index에 맞춰 연산)
axis=1 또는 'columns' - 열 기준 (column에 맞춰 연산)
호출 시점:
A + B → A.add(B)
B + A → A.radd(B)
사용이유:
연산 방향을 명확히 표현하고 싶을 때
코드 리뷰 / 가독성 중시
10 - df 같은 표현을 메서드로 쓸 때
덧셈/곱셈은 결과 같아 보여도 뺄셈/나눗셈은 의미가 완전히 다르다
df.mod(other, axis='columns', level=None, fill_value=None)
| 연산 | fill_value=0 결과 |
|---|---|
| add | 0 + x → x |
| mul | 0 × x → 0 |
| div | x / 0 → inf |
| mod | x % 0 → NaN |
]
mod는 0을 만나면 무조건 의미가 깨진다