PythonのPandasにおける割り算(除算)は、SeriesやDataFrame同士の要素ごとの割り算や、定数での除算を行うことができる強力な機能です。
以下では、基本から応用まで段階的に詳しく解説します。
目次
基本:定数との割り算
PandasのSeries
やDataFrame
に対して、スカラー値(定数)で割ることができます。
import pandas as pd
s = pd.Series([10, 20, 30])
result = s / 10
print(result)
出力
0 1.0
1 2.0
2 3.0
dtype: float64
補足ポイント
- デフォルトではfloat型に変換されます。
- ゼロ割りは
inf
やNaN
になる場合がありますが、NumPyと同様の挙動です。
Series同士の割り算(要素ごとの除算)
インデックスが一致している要素同士で割り算されます。
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([2, 4, 5], index=['a', 'b', 'c'])
result = s1 / s2
print(result)
出力
a 5.0
b 5.0
c 6.0
dtype: float64
インデックスがずれている場合
s3 = pd.Series([1, 2], index=['a', 'd'])
result = s1 / s3
print(result)
出力
a 10.0
b NaN
c NaN
d NaN
dtype: float64
→ インデックスが一致しないとNaN
になります。
DataFrame同士の割り算
DataFrameの場合は、行と列のラベル両方でアラインメント(整列)されて割り算されます。
df1 = pd.DataFrame({
'A': [10, 20],
'B': [30, 40]
})
df2 = pd.DataFrame({
'A': [2, 4],
'B': [5, 10]
})
result = df1 / df2
print(result)
出力
A B
0 5.0 6.0
1 5.0 4.0
列ごと・行ごとのブロードキャストによる除算
列ごとに定数割り(行方向に割る)
df = pd.DataFrame({
'A': [10, 20, 30],
'B': [5, 10, 15]
})
result = df / df.iloc[0] # 1行目(インデックス0)で各列を割る
print(result)
出力
A B
0 1.0 1.0
1 2.0 2.0
2 3.0 3.0
行ごとに定数割り(列方向に割る)
result = df.div(df['A'], axis=0) # 各行の'A'列の値で行を割る
print(result)
出力
A B
0 1.000000 0.5
1 1.000000 0.5
2 1.000000 0.5
注意点:ゼロ除算とNaN
s = pd.Series([10, 0, 30])
result = s / 0
print(result)
出力
0 inf
1 NaN
2 inf
dtype: float64
0/0
はNaN
n/0
はinf
(無限大)
実務でよくある除算の応用例
割合の計算(全体に対する比率)
df['A_ratio'] = df['A'] / df['A'].sum()
正規化(0〜1スケーリング)
df['A_norm'] = (df['A'] - df['A'].min()) / (df['A'].max() - df['A'].min())
補足:NumPyとの連携でパフォーマンスを意識
大量のデータ処理では、Pandasでも内部的にNumPyのベクトル演算を利用しています。
そのため、NumPyの除算関数(np.divide()
など)と組み合わせることで、エラーハンドリングを細かく制御できます。
import numpy as np
np.divide(df1, df2, out=np.zeros_like(df1), where=df2!=0)
まとめ
方法 | 説明 | 補足 |
---|---|---|
/ 演算子 | スカラー・Series・DataFrameで要素ごとに割る | インデックスやカラムの一致が重要 |
.div() | より柔軟な割り算 | fill_value やaxis 指定が可能 |
ブロードキャスト | 行ごと・列ごとの除算が可能 | axis=0 or axis=1 で調整 |
ゼロ除算 | inf やNaN になる可能性あり | 場合によっては.replace() などで対応 |
実務利用 | 割合、正規化、収益率などの計算に頻出 | 分母が0になる可能性に注意 |
以上、PythonのPandasでの割り算についてでした。
最後までお読みいただき、ありがとうございました。