PythonのPandasのapplyとlambdaについて

Python,イメージ

AI実装検定のご案内

Pandasのapplylambdaは、データ処理を柔軟かつ効率的に行うために非常によく使われる組み合わせです。

特に列ごとや行ごとの処理を行いたい場合に重宝します。

ここでは、基本の考え方 → 使い方のパターン → よくある応用例 → 注意点 の順で詳しく解説します。

目次

applyとは?

applyは、DataFrameやSeriesに対して関数を適用するメソッドです。

  • Seriesの場合(1次元)
    各要素に関数を適用します。
  • DataFrameの場合(2次元)
    行または列ごとに関数を適用します(axisで指定)。
import pandas as pd
import numpy as np

# サンプルDataFrame
df = pd.DataFrame({
    "A": [1, 2, 3],
    "B": [10, 20, 30]
})
print("=== df ===")
print(df)

# サンプルSeries
s = pd.Series([1, 2, 3, 4], name="s")
print("\n=== s ===")
print(s)

# 列ごとの合計(デフォルト axis=0)
col_sum = df.apply(np.sum, axis=0)
print("\n=== 列ごとの合計 ===")
print(col_sum)

# 行ごとの合計(axis=1)
row_sum = df.apply(np.sum, axis=1)
print("\n=== 行ごとの合計 ===")
print(row_sum)

lambdaとは?

lambdaはPythonの無名関数で、短い処理を関数として書くときに使います。

# 通常の関数
def square(x):
    return x ** 2

# lambdaで同等の処理
square_lambda = lambda x: x ** 2

print("\n=== square(5) vs square_lambda(5) ===")
print(square(5), square_lambda(5))

これをapplyと組み合わせることで、柔軟に処理を定義できるようになります。

apply × lambda の基本パターン

Seriesに使う場合

s = pd.Series([1, 2, 3, 4])

# 各要素を2乗
print(s.apply(lambda x: x ** 2))

DataFrameに使う場合(列や行に適用)

# 各値を2倍に
print(df.apply(lambda x: x * 2))  # 列方向(デフォルト axis=0)

# 各行ごとの合計を新しいSeriesとして返す
print(df.apply(lambda row: row["A"] + row["B"], axis=1))

よくある応用例

新しい列を作る

df["C"] = df.apply(lambda row: row["A"] + row["B"], axis=1)
print(df)

条件分岐

df["flag"] = df["A"].apply(lambda x: "大" if x > 2 else "小")
print(df)

文字列処理

names = pd.Series(["Alice", "Bob", "Charlie"])
print(names.apply(lambda x: x.lower()))

注意点とベストプラクティス

  • 速度の問題
    apply + lambdaは便利ですが、行単位の処理をすると遅くなる場合があります。
    可能であれば、PandasやNumPyのベクトル化処理を優先すると高速です。 例: # applyで書いた場合(遅い) df["C"] = df.apply(lambda row: row["A"] + row["B"], axis=1) # ベクトル演算で書いた場合(速い) df["C"] = df["A"] + df["B"]
  • 可読性
    lambdaを使いすぎるとコードが読みにくくなります。
    複雑な処理はdefで関数を定義してからapplyに渡すとよいです。 def categorize(x): if x > 2: return "大" else: return "小" df["flag"] = df["A"].apply(categorize)

まとめ

  • applyはPandasの各要素・列・行に関数を適用できる便利なメソッド。
  • lambdaは短い処理をその場で書ける無名関数。
  • 両者を組み合わせると、条件分岐・文字列処理・新しい列の計算など柔軟な処理が可能。
  • ただし速度面ではベクトル化処理が優先されるべきケースも多い。

以上、PythonのPandasのapplyとlambdaについてでした。

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

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