मेरे पास कई कॉलम में अनुपलब्ध डेटा वाला डेटाफ़्रेम है। इनमें से कुछ कॉलम में, 'Col_A' से 'Col_D' कहें, मैं उन्हें 0 से बदलना चाहता हूं। मैंने इसे इस तरह से आजमाया:

reduce(lambda x : df.fillna({x : 0}, inplace=True), ['Col_A', 'Col_B', 'Col_C', 'Col_D'])

लेकिन मुझे त्रुटि संदेश मिला <lambda>() takes 1 positional argument but 2 were given। आखिरकार, मैंने अपना समाधान सरलता से बदल दिया

df[['Col_A', 'Col_B', 'Col_C', 'Col_D']] = df[['Col_A', 'Col_B', 'Col_C', 'Col_D']].fillna(0)

लेकिन मुझे अभी भी आश्चर्य है कि समाधान के मेरे पिछले प्रयास में क्या गलत है।

-3
JBVasc 30 पद 2020, 11:37
फ़ंक्शन को कम करने के लिए पहला पैरामीटर, दो मापदंडों के साथ एक लैंबा होना चाहिए, जो पहला करेन मान है, दूसरा फ्रेम में अगला डेटा है।
 – 
ElapsedSoul
30 पद 2020, 11:47
ऐसा लगता है कि आपको मानचित्र का उपयोग करना चाहिए
 – 
michaeltang
30 पद 2020, 12:21

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि टिप्पणियों में उल्लेख किया गया है, यह कई मुद्दों के साथ अपने लक्ष्य को प्राप्त करने का एक अजीब तरीका है जो अच्छे प्रोग्रामिंग अभ्यास के खिलाफ जाता है

तो एक अस्वीकरण के साथ शुरू करें: मैं ऐसा करने की अनुशंसा नहीं करता, लेकिन समारोह के व्यवहार के बारे में प्रश्न का उत्तर दे रहा हूं।

अस्वीकरण के रास्ते से हटने के साथ, इसे दो छोटे बदलावों के साथ काम करने के लिए कर बनाया जा सकता है। निम्नलिखित काम करना चाहिए

reduce(lambda _, x : df.fillna({x : 0}, inplace=True), ['Col_A', 'Col_B', 'Col_C', 'Col_D'], 'fake')

पहले ध्यान दें कि हम lambda को दो तर्क लेने के लिए बनाते हैं, जैसा कि reduce फ़ंक्शन द्वारा आवश्यक है। पहला तर्क पिछले चरण में फ़ंक्शन के अनुप्रयोग का परिणाम है। यहां, चूंकि हम वास्तव में पिछले चरण में फ़ंक्शन के अनुप्रयोग के परिणाम की परवाह नहीं करते हैं, लेकिन वैश्विक (फ़ंक्शन को कम करने के लिए) चर df पर reduce के दुष्प्रभावों पर भरोसा करते हैं - यह इस दृष्टिकोण की मुख्य समस्या होने के कारण -- हम इसे एक अनाम तर्क _ बना देते हैं। दूसरा, हमें reduce काम करने के लिए एक प्रारंभिक बिंदु - तथाकथित इनिशियलाइज़र - की आवश्यकता है, क्योंकि यह इस मान के साथ लैम्ब्डा फ़ंक्शन को कॉल करेगा, और पहले चरण के रूप में सूची का पहला मान। यदि हम इनिशियलाइज़र को छोड़ देते हैं जैसा आपने किया था, तो यह सूची के पहले दो मानों से शुरू होगा, इस प्रकार मूल रूप से Col_A से fillna गायब है। तो, इसलिए, हमारे पास 'fake' inializer reduce फ़ंक्शन के लिए पास किया गया है (यदि आप स्पष्ट नहीं हैं तो आप इसे जो चाहें कॉल कर सकते हैं)

1
piterbarg 31 पद 2020, 01:17