Pandas DataFrame DataFrame.apply()関数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.apply() の構文:
  2. コード例:DataFrame.apply() メソッド
  3. コード例:DataFrame.apply() を使用して各列に関数を適用する
  4. コード例:DataFrame.apply() メソッドで各行に関数を適用する
  5. コード例:result_type パラメータを指定する DataFrame.apply() メソッド
Pandas DataFrame DataFrame.apply()関数

pandas.DataFrame.apply() 関数は、入力関数を行に沿ったすべての要素に適用しますまたは、呼び出し元の Pandas DataFrame の列。

pandas.DataFrame.apply() の構文:

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)

パラメーター

func 各行または列に適用される関数
axis 行(axis = 0)または列(axis = 1)に沿って関数を適用する
raw ブール。Series オブジェクト(raw = False)または ndarray オブジェクト(raw = True)として渡される行/列
result_type {expandreducebroadcastNone}
操作の出力タイプは、axis = 1(列)にのみ適用可能
バージョン 0.23.0 の新機能
args 関数 func の位置引数
**kwds 関数 func のキーワード引数

戻り値

指定された軸に沿って入力関数を適用した後、DataFrame を返します。

コード例:DataFrame.apply() メソッド

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: x**2)
print(modified_df)

出力:

   X  Y
0  1  4
1  2  1
2  3  8
   X   Y
0  1  16
1  4   1
2  9  64

DataFrame.apply() メソッドを使用して、lambda 関数 lambda x:x ** 2DataFrame のすべての要素に適用します。

ラムダ関数は、Python で関数を定義する簡単な方法です。

lambda x:x ** 2 は、x を入力として受け取り、x ** 2 を出力として返す関数を表します。

コード例:DataFrame.apply() を使用して各列に関数を適用する

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(np.sum)
print("Modified DataFrame")
print(modified_df)

出力:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
X     6
Y    13
dtype: int64

ここでは、axis = 0(デフォルト値)であるため、各列に np.sum が適用されます。

したがって、df.apply() メソッドを使用した後、各列の要素の合計を取得します。

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: (x**2)  if x.name == 'X' else x)
print(modified_df)

出力:

   X  Y
0  1  4
1  2  1
2  3  8
   X  Y
0  1  4
1  4  1
2  9  8

関数を特定の列にのみ適用する場合は、if ステートメントを使用して関数の定義を変更し、列をフィルター処理します。この例では、関数は列名が X の列のみの値を変更します。

コード例:DataFrame.apply() メソッドで各行に関数を適用する

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)
modified_df=df.apply(np.sum, axis=1)
print("Modified DataFrame")
print(modified_df)

出力:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
0     5
1     3
2    11
dtype: int64

ここでは、この例では axis = 1 を設定したので、np.sum が一度に各行に適用されます。

したがって、df.apply() メソッドを使用した後、すべての行の個々の要素の合計を取得します。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print(df)
modified_df=df.apply(lambda x: (x**2)  if x.name in [0,1] else x,
                     axis=1)
print(modified_df)

出力:

   X  Y
0  1  4
1  2  1
2  3  8
   X   Y
0  1  16
1  4   1
2  3   8

特定の行にのみ関数を適用する場合は、if ステートメントを使用して関数定義を変更し、行をフィルター処理します。この例では、関数はインデックス 01 を持つ行のみの値、つまり 1 行目と 2 行目のみを変更します。

コード例:result_type パラメータを指定する DataFrame.apply() メソッド

result_type パラメータのデフォルト値、つまり None を使用すると、変更なしで DataFrame が返されます。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)

modified_df=df.apply(lambda x:[1,1],axis=1)
print("Modified DataFrame")
print(modified_df)

出力:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
0    [1, 1]
1    [1, 1]
2    [1, 1]
dtype: object

上記の例では、各行が一度に関数に渡され、行の値は [1,1] に設定されます。

関数が DataFrame を操作した後で結果のタイプを変更する場合は、必要に応じて result_type の値を設定できます。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame")
print(df)

modified_df=df.apply(lambda x:[1,1],
                     axis=1,
                     result_type='expand')
print("Modified DataFrame")
print(modified_df)

出力:

Original DataFrame
   X  Y
0  1  4
1  2  1
2  3  8
Modified DataFrame
   0  1
0  1  1
1  1  1
2  1  1

result_type = 'expand'を設定すると、すべてのリストのような値が DataFrame の列に展開されます。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame