PythonのPandasでの割り算について

Python,イメージ

AI実装検定のご案内

PythonのPandasにおける割り算(除算)は、SeriesやDataFrame同士の要素ごとの割り算や、定数での除算を行うことができる強力な機能です。

以下では、基本から応用まで段階的に詳しく解説します。

目次

基本:定数との割り算

PandasのSeriesDataFrameに対して、スカラー値(定数)で割ることができます。

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型に変換されます。
  • ゼロ割りはinfNaNになる場合がありますが、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/0NaN
  • n/0inf(無限大)

実務でよくある除算の応用例

割合の計算(全体に対する比率)

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_valueaxis指定が可能
ブロードキャスト行ごと・列ごとの除算が可能axis=0 or axis=1で調整
ゼロ除算infNaNになる可能性あり場合によっては.replace()などで対応
実務利用割合、正規化、収益率などの計算に頻出分母が0になる可能性に注意

以上、PythonのPandasでの割り算についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次