Python初心者でもわかる!Pandasのapply関数の基本と応用

「apply」の使い方 Pandas

PandasはPythonでデータ分析を行う際に非常に便利なライブラリです。

特にデータの処理や変換を行うためのツールとして、多くのデータサイエンティストやエンジニアに愛用されています。

その中でも強力な関数の一つが apply関数 です。

今回は、Pandasのapply関数について詳しく解説し、実践的な例を交えながら、どのように使うべきかを紹介していきます。

Pandasのapply関数とは?

apply関数は、DataFrameやSeriesの各要素に対して、指定した関数を適用するためのメソッドです。

これにより、カスタマイズした処理を簡単に行うことができます。

例えば、データの正規化、カスタム集計、新しい列の追加などが簡単に行えます。

ゆーや
ゆーや

SeriesやDataFrameの要素に一斉に何か処理をするのに適しているようだね!

applyの基本的な使い方

Seriesに対するapplyの基本的な使い方

まず、PandasのSeriesオブジェクトに対してapply関数を適用する方法から見ていきましょう。

import pandas as pd

# サンプルデータ
data = [10, 20, 30, 40, 50]

# リストからSeriesを作成
series = pd.Series(data)

# Seriesの要素全体を2倍に
result = series.apply(lambda x: x * 2)

# 出力
print(result)
ゆーや
ゆーや

上の例は、Seriesの各要素を2倍にする例です!

DataFrameに対するapplyの基本的な使い方

次にDateFrameに対して、apply関数を適用する方法を見ていきます!

import pandas as pd

# サンプルデータ
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'Age': [17, 21, 16, 35, 13]
}

# DataFrameの作成
df = pd.DataFrame(data)

# 年齢に基づいてカテゴリを追加する
df['Category'] = df['Age'].apply(lambda x: 'Adult' if x >= 18 else 'Minor')

# 出力
print(df)
ゆーや
ゆーや

上の例では、DataFrameのAge要素が18以上であれば、「Adult」それ以外を「Minor」と判定する「Category」をDataFrameに追加しています!

DataFrameに対するapplyの応用例

DataFrame全体に対して関数を適用する場合、apply関数行方向(axis=1)または列方向(axis=0)に適用できます。

列方向に適用(axis=0)

import pandas as pd

# サンプルデータ
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'Age': [17, 21, 16, 35, 13]
}

# DataFrameの作成
df = pd.DataFrame(data)

# 各列に対して合計値を計算する
result = df[['Age']].apply(lambda x: x * 2, axis=0)

# 出力
print(result)
ゆーや
ゆーや

これが「DataFrameに対するapplyの基本的な使い方」で紹介した方法だね!

axis=0はデフォルトなので書かなくても問題ないです!

行方向に適用(axis=1)

import pandas as pd

# サンプルデータ
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'Age': [17, 21, 16, 35, 13]
}

# DataFrameの作成
df = pd.DataFrame(data)

# 行ごとにName, Gender, Ageの情報を結合して新しい列を作成
df['Summary'] = df.apply(lambda row: f"{row['Name']} は {row['Age']} 歳({row['Gender']})", axis=1)

# 出力
print(df)
ゆーや
ゆーや

上記のように、行のデータを使って、文字列を作ることもできるし、

すべて数値だったら平均や合計の計算もできるね!

カスタム関数を定義してapplyに渡す

import pandas as pd

# サンプルデータ
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'Age': [17, 21, 16, 35, 13]
}

# DataFrameの作成
df = pd.DataFrame(data)

# カスタム関数の定義
def categorize_age(age):
    if age < 18:
        return 'Minor'
    elif 18 <= age < 65:
        return 'Adult'
    else:
        return 'Senior'

# apply関数にカスタム関数を渡す
df['Age Category'] = df['Age'].apply(categorize_age)

# 出力
print(df)
ゆーや
ゆーや

こちらは、Ageから「Senior,Adult,Minor」を判定して、Age Categoryという列を追加するサンプルです!

要するに「Pythonで書ける処理であれば、この書き方をすればなんでもできる」ということです!

まとめ

Pandasのapply関数は、データを柔軟に処理するための非常に強力なツールです。

特に、カスタム関数を適用したり、行や列に対して特定の操作を行いたい場合に重宝します。

ただし、大量のデータに対してはパフォーマンスの低下に注意が必要です。

NumPyなどのライブラリと組み合わせて使うことで、効率的なデータ処理が可能になります。

この記事が、apply関数をより効果的に使うための一助となれば幸いです。ぜひ、実際のデータ分析で試してみてください!

コメント

タイトルとURLをコピーしました