PythonのPandasで「絶対値(absolute value)」を取得する方法は、データの前処理や統計処理において非常によく使われる操作のひとつです。
pandas
では、主にabs()
メソッドを使うことで、Series
やDataFrame
内の各要素の絶対値を簡単に取得できます。
以下に、基本から応用までを含めて詳しく解説していきます。
目次
基本:abs()
メソッドの使い方
対象:Series
または DataFrame
- Pandasオブジェクト(
Series
やDataFrame
)に対して.abs()
を使うだけで、要素のすべての絶対値を取得できます。 - これは
numpy.abs()
やmath.fabs()
のPandas版のようなものです。
例:Seriesの場合
import pandas as pd
# Seriesを作成
s = pd.Series([-5, -2, 0, 3, -8])
# 絶対値を取得
abs_s = s.abs()
# 結果を表示
print(abs_s)
例:DataFrameの場合
import pandas as pd
# DataFrameを作成
df = pd.DataFrame({
'A': [-1, -2, 3],
'B': [4, -5, -6]
})
# 絶対値を取得
abs_df = df.abs()
# 結果を表示
print(abs_df)
他の方法(NumPyとの連携)
Pandasは内部的にNumPyの配列を使っているため、numpy.abs()
を使っても同様の処理が可能です。
import pandas as pd
import numpy as np
# 元のDataFrame
df = pd.DataFrame({
'A': [-1, -2, 3],
'B': [4, -5, -6]
})
# NumPyを使って絶対値を取得
abs_df_np = pd.DataFrame(np.abs(df), columns=df.columns)
# 結果を表示
print(abs_df_np)
この方法では、列名が消える場合があるので注意が必要です。
df.abs()
の方が安全で直感的です。
特定の列にだけ適用したい場合
import pandas as pd
# DataFrameを作成
df = pd.DataFrame({
'A': [-1, -2, 3],
'B': [4, -5, -6]
})
# A列だけ絶対値にする(上書き)
df['A'] = df['A'].abs()
# または、新しい列として追加
df['A_abs'] = df['A'].abs()
print(df)
絶対値を使った条件フィルタ
絶対値を使って行をフィルタすることもできます。
import pandas as pd
# DataFrameを作成
df = pd.DataFrame({
'A': [-1, -2, 3],
'B': [4, -5, -6]
})
# A列の絶対値が2以上の行を抽出
filtered = df[df['A'].abs() >= 2]
print(filtered)
応用:列ごとに絶対値の合計・平均を求める
import pandas as pd
# DataFrameを作成
df = pd.DataFrame({
'A': [-1, -2, 3],
'B': [4, -5, -6]
})
# 絶対値の合計
sum_abs = df.abs().sum()
# 絶対値の平均
mean_abs = df.abs().mean()
print("絶対値の合計:")
print(sum_abs)
print("\n絶対値の平均:")
print(mean_abs)
欠損値(NaN)を含む場合の挙動
.abs()
は NaN をそのまま残します。
import pandas as pd
# NaNを含むDataFrame
df_with_nan = pd.DataFrame({
'A': [-1, None, 3],
'B': [4, -5, None]
})
# 絶対値を取得
abs_with_nan = df_with_nan.abs()
print(abs_with_nan)
複数条件や複雑な操作の中での絶対値利用例
例えば、列Aと列Bの差の絶対値が3以上の行だけを取り出す場合。
import pandas as pd
# DataFrameを作成
df = pd.DataFrame({
'A': [-1, -2, 3],
'B': [4, -5, -6]
})
# 差の絶対値を新しい列に
df['diff'] = (df['A'] - df['B']).abs()
# 差の絶対値が3以上の行だけを抽出
filtered_df = df[df['diff'] >= 3]
print(filtered_df)
まとめ:.abs()
の特徴
項目 | 内容 |
---|---|
メソッド名 | .abs() |
対象 | Series , DataFrame |
戻り値 | 絶対値を持つ同型のPandasオブジェクト |
NaNの扱い | 変化なし(そのままNaN) |
他の方法 | numpy.abs() との併用も可能 |
注意点 | np.abs() は列名などのメタデータを失うことがある |
補足:使いどころ
- 誤差(差分)の評価における 絶対誤差 計算
- 残差の大きさチェック
- ネガティブ値の正規化処理
- 特定範囲からの逸脱チェック(例:センサーデータの外れ値検出)
終わりに
pandas.Series.abs()
や pandas.DataFrame.abs()
は、非常に軽量かつ高速な処理ですので、Pandasを用いたデータ前処理やクリーニングでは頻繁に登場します。
必要に応じて .apply()
や lambda
などと組み合わせることで、より柔軟な変換処理も可能です。
以上、PythonのPandasで絶対値を取得する方法についてでした。
最後までお読みいただき、ありがとうございました。