English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas関数の適用

Pandasのリブートインデックス操作の例

あなた自身や他のライブラリの関数をPandasオブジェクトに適用するには、3つの重要なメソッドを理解する必要があります。以下に説明します。使用する適切なメソッドは、関数がデータフレーム全体に対して操作を行いたいか、行操作を行いたいか、列操作を行いたいか、要素操作を行いたいかによって異なります。

表関数の適用:pipe() 行または列関数の適用:apply() 要素レベル関数の適用:applymap()

表関数の適用

関数と適切な数のパラメータをパイプラインパラメータとして渡すことで、DataFrameに対するカスタム操作を実行できます。

加法器関数

例えば、2値をDataFrameに追加します。加法器機能は、2つの数字値を足し算し、合計を返します。

  def adder(ele1,ele2)
    return ele1+ele2

カスタム関数を使用してDataFrameを操作します。

 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.pipe(adder,2)

完全なプログラムを見てみましょう:

 import pandas as pd
 import numpy as np
 def adder(ele1,ele2)
    return ele1+ele2
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.pipe(adder,2)
 print(df.apply(np.mean))

実行結果:

       col1 col2 col3
 0 2.176704 2.219691 1.509360
 1 2.222378 2.422167 3.953921
 2 2.241096 1.135424 2.696432
 3 2.355763 0.376672 1.182570
 4 2.308743 2.714767 2.130288

行または列関数の適用

DataFrameやPanelの軸に任意の関数を適用するapply()メソッドを使用できます。このメソッドは描述的統計方法と同様に、オプションのaxisパラメータを使用します。デフォルトでは、この操作は列に対して実行され、各列を配列の形式とみなします。

インスタンス 1

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.apply(np.mean)
 print(df.apply(np.mean))

実行結果:

 col1 -0.288022
 col2 1.044839
 col3 -0.187009
 dtype: float64

axisパラメータを渡すことで、各行で操作を実行できます。

インスタンス 2

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.apply(np.mean,axis=1)
 print(df.apply(np.mean))

実行結果:

 col1 0.034093
 col2 -0.152672
 col3 -0.229728
 dtype: float64

インスタンス 3

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.apply(lambda x: x.max() - x.min())
 print(df.apply(np.mean))

実行結果:

 col1 -0.167413
 col2 -0.370495
 col3 -0.707631
 dtype: float64

要素レベルの関数アプリケーション

并非所有函数都可以向量化(NumPy配列は新しい配列を返さず、何も返さない)、DataFrame上のapplymap()メソッドとSeries上のmap()メソッドは、引数を受け取り、引数を返すPython関数を任意に受け入れる。

インスタンス 1

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 # カスタム関数
 df['col1'].map(lambda x:x*100)
 print(df.apply(np.mean))

実行結果:

 col1 0.480742
 col2 0.454185
 col3 0.266563
 dtype: float64

インスタンス 2

 import pandas as pd
 import numpy as np
 # カスタム関数
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.applymap(lambda x:x*100)
 print(df.apply(np.mean))

実行結果:

 col1 0.395263
 col2 0.204418
 col3 -0.795188
 dtype: float64