投資とプログラミングな日々

投資が趣味なITエンジニアの雑記ブログです。

python pandas DataFrameに、applyメソッドを使って関数を実行させる

さて、前回に引き続きpandas DataFrameについて書きたいと思います。

f:id:toyo--104:20190428005726p:plain

DataFrameの値を処理する際に、関数を実行させて複雑な処理をしたいこともあると思います。

そんな時はapplyメソッドを使って処理を適用しましょう。

サンプルコード

以下のサンプルコードで解説します。

コードのコメントに説明も書いていますので、参考にしてくださいね。

# 以下でpandasをimportします。
# 一般的に、pdという別名を付けます。
import pandas as pd

# 以下で、DataFrameにわたす辞書型の変数を定義します。
# 辞書型は、キー : バリュー で表します。
# バリューはリスト([] で囲った形式)にしてください。
data = {"val1" : [0,1,2,3,4],
        "val2" : [1,2,3,4,5]}
df = pd.DataFrame(data)
print(df)

# 引数xを2倍にするlambda式(無名関数)「multiplication」を定義しています
multiplication = lambda x: x*2

# loc[:,"val1"]は、val1列の全行を意味します。
# 上記の指定方法に言及するために、val2列を追加しました。
# val2列は使いません。
# これをmap関数を用いて先程定義したmultiplicationに渡しています。
df["val1*2"] = df.loc[:,"val1"].apply(multiplication)

print(df)

これを実行しながら解説します。

サンプルコードの実行結果

まずは最初のprint。これはDataFrameの確認用です。

出力結果は以下のようになり、DataFrameが定義されたことがわかります。

   val1  val2
0     0     1
1     1     2
2     2     3
3     3     4
4     4     5

これが、コードに記載されているlambda関数を実行することにより、val1の値が2倍されて結果の列がDataFrameに追加されます。

最終行に書かれているprintの結果を以下に記載します。

   val1  val2  val1*2
0     0     1       0
1     1     2       2
2     2     3       4
3     3     4       6
4     4     5       8

val1*2の列に、val1の2倍の値が入っていると思います。 

これを応用していけば、複雑なことができるようになります。

まずは簡単なこの例でapplyやlambda関数の動きを押さえましょう。

また、lambda関数でなくても、普通にdefで関数を定義しても呼び出すことができます。これはお好みですね。