Pandas 0.16.2 で追加された pipe() の使い方

takahiro_ikeuchi

2015年7月23日に開催された 「Pythonエンジニア養成読本」読書会 03 – connpass で触れた話題ですが、Pandas 0.16.2 に、pipe()というメソッドが追加されています。

以下のデータ master.csv を扱います。

id name price
i100 ham 230
i200 egg 150
i300 bacon 170

簡単な使い方を解説します。

pipe()の第1引数に関数名を指定します。この結果、master.csv と同じデータが返ります。関数f() はなにもせず、受け取ったDataFrameを返すだけの関数でした。

関数f() をもう少し複雑にします。

この結果、次のデータが得られます。

id name price tax_in
i100 ham 230 248.4
i200 egg 150 162.0
i300 bacon 170 183.6

pipe() は、DataFrameオブジェクトまたはSeriesオブジェクトに対して関数を適応できます。

引数も利用できます。

結果は「消費税の計算を行うpipe()の例」の実行結果と同等です。

ただし、これだけではpipe()のメリットは享受できていません。pipe()のメリットは、その名の通り、定義した関数を数珠つなぎに実行できる点にあります。

この結果、次のデータが得られます。

id name price tax_in
i100 ham 200 216.0
i200 egg 150 162.0
i300 bacon 170 183.6

これまでも、DataFrame(Series)に関数を適応する方法として、DataFrame.apply などが利用できました。

例に挙げたように、データの加工や計算を多段で行う場合にpipe()を利用すると、複雑なネストを防ぎ、データの変更を意識しやすいコードになります。