19

一連の機能をベクトル化するために Python のコードをクリーンアップしようとしていますが、apply を使用して複数の引数を渡す良い方法があるかどうか疑問に思っています。以下を検討してください(現在のバージョン):

def function_1(x):
    if "string" in x:
        return 1
    else:
        return 0

df['newFeature'] = df['oldFeature'].apply(function_1)

"string"上記では、見つけたい各部分文字列をテストするために、新しい関数 (function_1、function_2 など) を作成する必要があります。理想的な世界では、これらの冗長な機能をすべて組み合わせて、次のようなものを使用できます。

def function(x, string):
    if string in x:
        return 1
    else:
        return 0

df['newFeature'] = df['existingFeature'].apply(function("string"))

しかし、それを試みるとエラーが返されますTypeError: function() takes exactly 2 arguments (1 given)同じことを達成する別の方法はありますか?

編集:

def function(string, x):
    if string in x:
        return 1
    else:
        return 0

df['newFeature'] = df['oldFeature'].apply(partial(function, 'string'))
4

1 に答える 1

14

私はあなたが望むと信じていますfunctools.partial。デモ:

>>> from functools import partial
>>> def mult(a, b):
...     return a * b
...
>>> doubler = partial(mult, 2)
>>> doubler(4)
8

あなたの場合、function(のアイデアのためにpartial)引数を交換する必要があり、それからちょうど

df['existingFeature'].apply(partial(function, "string"))
于 2013-10-02T15:01:47.410 に答える