209

Python pandas のシリーズに引数を持つ関数を適用したい:

x = my_series.apply(my_function, more_arguments_1)
y = my_series.apply(my_function, more_arguments_2)
...

ドキュメントには apply メソッドのサポートが記載されていますが、引数は受け入れられません。引数を受け取る別のメソッドはありますか? または、簡単な回避策がありませんか?

更新 (2017 年 10 月): この質問は最初に pandasapply()が位置引数とキーワード引数を処理するように更新されたことを尋ねられたため、上記のドキュメント リンクはそれを反映し、いずれかのタイプの引数を含める方法を示していることに注意してください。

4

6 に答える 6

228

新しいバージョンのパンダで、追加の引数を渡すことができます(新しいドキュメントを参照してください)。だから今あなたはすることができます:

my_series.apply(your_function, args=(2,3,4), extra_kw=1)

位置引数は、シリーズの要素の後に追加されます。


古いバージョンのパンダの場合:

ドキュメントはこれを明確に説明しています。applyメソッドは、単一のパラメーターを持つ必要があるpython関数を受け入れます。より多くのパラメーターを渡したい場合はfunctools.partial、JoelCornettのコメントで提案されているように使用する必要があります。

例:

>>> import functools
>>> import operator
>>> add_3 = functools.partial(operator.add,3)
>>> add_3(2)
5
>>> add_3(7)
10

を使用してキーワード引数を渡すこともできますpartial

別の方法は、ラムダを作成することです。

my_series.apply((lambda x: your_func(a,b,c,d,...,x)))

しかし、私は使用するpartial方が良いと思います。

于 2012-08-29T17:36:10.973 に答える
109

手順:

  1. データフレームを作成する
  2. 関数を作成する
  3. apply ステートメントで関数の名前付き引数を使用します。

x=pd.DataFrame([1,2,3,4])  

def add(i1, i2):  
    return i1+i2

x.apply(add,i2=9)

この例の結果は、データフレーム内の各数値が数値 9 に追加されることです。

    0
0  10
1  11
2  12
3  13

説明:

「add」関数には、i1、i2 の 2 つのパラメーターがあります。最初のパラメータはデータ フレームの値になり、2 番目のパラメータは「適用」関数に渡すものになります。この場合、キーワード引数 "i2" を使用して apply 関数に "9" を渡しています。

于 2017-04-17T22:15:26.613 に答える
49
Series.apply(func, convert_dtype=True, args=(), **kwds)

args : tuple

x = my_series.apply(my_function, args = (arg1,))
于 2014-11-13T21:12:58.800 に答える
1

ほとんどのことは他の回答でカバーされています。見逃した可能性があることを繰り返したい場合は、args タプルの引数の後にコンマを追加する必要があります。以下の例を参照してください。

df['some_column'].apply(function_name, args=(arg1 ,) #Here comma is necessary.
于 2021-11-12T08:07:33.773 に答える