<aside>
💡 기본적으로 판다스 객체들의 산술연산은 정렬 → 대응 → 연산 과정을 거친다. 대응되는 원소들이 없다면 NaN으로 처리하게 된다.
NaN은 fill_values옵션으로 초기화가능하다.
</aside>
직관적으로 이해가능하다.
import pandas as pd
coord_data = {
"x": 20,
"y": 40,
"z": 30
}
coord = pd.Series(coord_data)
print("< Original Coord >")
print(coord)
coord = coord + 20
print("\\n< +20 >")
print(coord)
< Original Coord >
x 20
y 40
z 30
dtype: int64
< +20 >
x 40
y 60
z 50
dtype: int64
import pandas as pd
A_coord_data = {
"x": 20,
"y": 40,
"z": 30
}
B_coord_data = {
"x": 10,
"y": -30,
"z": -10,
"t": 300
}
A_sr = pd.Series(A_coord_data)
B_sr = pd.Series(B_coord_data)
C_sr = A_sr + B_sr
print(C_sr)
t NaN
x 30.0
y 10.0
z 20.0
dtype: float64
NaN은 fill_values로 처리해 줄 수 있다. 이 경우 연산을 연산자가 아니라 메서드로 해주면 된다.
import pandas as pd
A_coord_data = {
"x": 20,
"y": 40,
"z": 30
}
B_coord_data = {
"x": 10,
"y": -30,
"z": -10,
"t": 300,
"s": 200
}
A_sr = pd.Series(A_coord_data)
B_sr = pd.Series(B_coord_data)
r0 = A_sr.add(B_sr, fill_value=0)
r1 = A_sr.sub(B_sr, fill_value=0)
r2 = A_sr.mul(B_sr, fill_value=0)
r3 = A_sr.div(B_sr, fill_value=0)
result = pd.DataFrame([r0, r1, r2, r3],
index=["add", "sub", "mul", "div"])
print(result)
s t x y z
add 200.0 300.0 30.0 10.000000 20.0
sub -200.0 -300.0 10.0 70.000000 40.0
mul 0.0 0.0 200.0 -1200.000000 -300.0
div 0.0 0.0 2.0 -1.333333 -3.0
이 역시 직관적으로 이해가능하다.
import pandas as pd
col = ["X", "Y", "Z"]
row = ["A", "B", "C"]
coord_data1 = [
[1, 4, 3],
[3, 1, 7],
[2, 0, 3]
]
coord_data2 = [
[-1, -1, 1],
[0, 3, 1],
[-2, -1, 0]
]
df1 = pd.DataFrame(coord_data1, index=row, columns=col)
df2 = pd.DataFrame(coord_data2, index=row, columns=col)
print("DataFrame + number\\n")
print(df1 + 100)
print()
print(df1 - 100)
print()
print(df1 * 100)
print()
print(df1 / 100)
print("\\nDataFrame + DataFrame\\n")
print(df1 + df2)
print()
print(df1 - df2)
print()
print(df1 * df2)
print()
print(df1 / df2)