निम्नलिखित डेटाफ्रेम के साथ कई स्तंभों का उपयोग करते समय मुझे पंडों के कार्य के साथ कुछ समस्याएं हैं
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
जितना संभव हो उतना उपयोग करने से बचें । यदि आप सुनिश्चित नहीं हैं कि आपको इसका उपयोग करने की आवश्यकता है, तो आप संभवतः नहीं। मेरा सुझाव है कि मुझे अपने कोड में पंडों को लागू करने () का उपयोग कब करना चाहिए? ।