Pynote

Python、機械学習、画像処理について

pandas - 基本的な関数 まとめ (比較演算、四則演算、絶対値、クリップ、etc)

演算は同じインデックス同士で行われる。

pandas で2つの DataFrame または Series 同士で演算を行う場合、演算は同じインデックス同士で行われる。
そのインデックスが一方にない場合は、NaN として演算が行われる。

例えば、以下はインデックス "a" は s1、"d" は s2 にしか存在しないので、
インデックス "a" は 1 + NaN、インデックス "d" は NaN + 3 として計算される。
その結果、インデックス "a" 及び "d" の演算結果は NaN になる。

import pandas as pd

s1 = pd.Series([1, 2, 3], index=["a", "b", "c"])
s2 = pd.Series([1, 2, 3], index=["b", "c", "d"])

s3 = s1 + s2
print(s3)
# a    NaN
# b    3.0
# c    5.0
# d    NaN
# dtype: float64

絶対値、内積、行列積、丸め、クリップ

DataFrame Series numpy 説明
DataFrame.abs Series.abs abs |x|
DataFrame.dot Series.dot dot DataFrame: 行列積
Series: 内積
DataFrame.round Series.round around 指定した桁に丸める。
DataFrame.clip Series.clip clip 指定範囲に値をクリップする。

Series.abs、DataFrame.abs

絶対値をとる。

import pandas as pd

s = pd.Series([1, -2, -3])
ret = s.abs()
print(ret)
# 0    1
# 1    2
# 2    3
# dtype: int64

df = pd.DataFrame([[1, -2], [3, -4]])
ret = df.abs()
print(ret)
#    0  1
# 0  1  2
# 1  3  4

Series.dot、DataFrame.dot

Series.dot は内積を計算する。

import pandas as pd

s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])

ret = s1.dot(s2)
print(ret)
# 32

# 以下と同値
ret = s1 @ s2
print(ret)
# 32

DataFrame.dot は行列積を計算する。

import pandas as pd

df1 = pd.DataFrame([[6, 4], [5, 4]])
df2 = pd.DataFrame([[7, 5], [1, 6]])

ret = df1.dot(df2)
print(ret)
#     0   1
# 0  46  54
# 1  39  49

# 以下と同値
ret = df1 @ df2
print(ret)
#     0   1
# 0  46  54
# 1  39  49

Series.round、DataFrame.round

小数を指定した桁に丸める。

import pandas as pd

s = pd.Series([1.123, -2.125, -3.127])
ret = s.round(2)
print(ret)
# 0    1.12
# 1   -2.12
# 2   -3.13
# dtype: float64

df = pd.DataFrame([[1.123, -2.125], [3.127, -4.129]])
ret = df.round(2)
print(ret)
#       0     1
# 0  1.12 -2.12
# 1  3.13 -4.13

Series.clip、DataFrame.clip

指定した範囲に値をクリップする。

import pandas as pd

s = pd.Series([0, 1, 2, 3, 4, 5])
ret = s.clip(1, 3)
print(ret)
# 0    1
# 1    1
# 2    2
# 3    3
# 4    3
# 5    3
# dtype: int64

df = pd.DataFrame([[0, 1, 2], [3, 4, 5]])
ret = df.clip(1, 3)
print(ret)
#    0  1  2
# 0  1  1  2
# 1  3  3  3