次のデータフレームで複数の列を使用すると、パンダの適用機能に問題があります
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
そして次の機能
def my_test(a, b):
return a % b
私がこの関数を適用しようとすると:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
エラーメッセージが表示されます。
NameError: ("global name 'a' is not defined", u'occurred at index 0')
このメッセージを理解できません。名前を正しく定義しました。
この問題について何か助けていただければ幸いです
更新
ご協力いただきありがとうございます。私は実際にコードでいくつかの構文ミスを犯しました、インデックスは ''に入れるべきです。ただし、次のようなより複雑な関数を使用しても同じ問題が発生します。
def my_test(a):
cum_diff = 0
for ix in df.index():
cum_diff = cum_diff + (a - df['a'][ix])
return cum_diff
my_test(a)
はdf
引数として渡されなかったため、何であるかを知りません(df
グローバルであると想定されていない限り、これはひどい習慣になるでしょう)。関数内で必要なすべての値を引数として(できれば順番に)渡す必要があります。それ以外の場合、関数はどこdf
から来たのか他にどのようにして知るのでしょうか?また、グローバル変数が散らばっている名前空間でプログラムを作成することはお勧めできません。このようなエラーは検出されません。
apply
できるだけ使用しないでください。使用する必要があるかどうかわからない場合は、おそらく使用しないでください。私のコードでいつpandas apply()を使用する必要があるかを確認することをお勧めしますか?。