Saya memiliki beberapa masalah dengan fungsi berlaku Pandas, ketika menggunakan beberapa kolom dengan kerangka data berikut
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
dan fungsi berikut
def my_test(a, b):
return a % b
Ketika saya mencoba menerapkan fungsi ini dengan:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Saya mendapatkan pesan kesalahan:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Saya tidak mengerti pesan ini, saya mendefinisikan nama dengan benar.
Saya akan sangat menghargai bantuan apa pun tentang masalah ini
Memperbarui
Terima kasih atas bantuan Anda. Saya memang membuat beberapa kesalahan sintaks dengan kode, indeks harus diletakkan ''. Namun saya masih mendapatkan masalah yang sama menggunakan fungsi yang lebih kompleks seperti:
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)
tidak tahu apa df
karena tidak disahkan sebagai argumen (kecuali df
seharusnya menjadi global, yang akan menjadi praktik yang mengerikan). Anda harus melewati semua nilai yang Anda perlukan di dalam suatu fungsi sebagai argumen (lebih disukai dalam urutan), jika tidak, bagaimana lagi fungsi itu tahu dari mana df
datangnya? Selain itu, praktik buruk untuk memprogram dalam namespace yang dipenuhi dengan variabel global, Anda tidak akan mendapatkan kesalahan seperti ini.
apply
sebanyak mungkin. Jika Anda tidak yakin perlu menggunakannya, mungkin Anda tidak menggunakannya. Saya merekomendasikan untuk melihat Kapan saya ingin menggunakan panda apply () dalam kode saya? .