Aşağıdaki dataframe ile birden çok sütun kullanırken, Pandalar uygulama işleviyle ilgili bazı sorunlar var
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
ve aşağıdaki fonksiyon
def my_test(a, b):
return a % b
Bu işlevi ile uygulamaya çalıştığınızda:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Hata mesajını alıyorum:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Bu mesajı anlamıyorum, adı doğru tanımladım.
Bu konuda herhangi bir yardım için çok minnettar olurum
Güncelleme
Yardımınız için teşekkürler. Gerçekten kod ile bazı sözdizimi hataları yaptım, dizin koymak gerekir ''. Ancak yine de aynı sorunu daha karmaşık bir işlevi kullanarak alıyorum:
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
bir argüman olarak aktarılmadığından ne olduğunu bilmiyor (eğer df
küresel olması gerekiyorsa, bu korkunç bir uygulamadır). Bir fonksiyonun içinde ihtiyacınız olan tüm değerleri argüman olarak (tercihen sırayla) iletmeniz gerekir, aksi takdirde fonksiyon başka nereden df
geldiğini nasıl bilir ? Ayrıca, global değişkenlerle dolu bir ad alanında program yapmak kötü bir uygulamadır, böyle hataları yakalamazsınız.
apply
Mümkün olduğunca kullanmaktan kaçının . Kullanmanız gerektiğinden emin değilseniz muhtemelen kullanmıyorsunuzdur. Kodumda ne zaman panda uygula () kullanmak istersem? .