मैं पंडों के डेटाफ्रेम में सभी मानों को ढूंढना चाहता हूं जिसमें व्हाट्सएप (कोई भी मनमानी राशि) हो और उन मानों को NaNs से बदल दें।
किसी भी विचार यह कैसे सुधार किया जा सकता है?
मूल रूप से मैं इसे चालू करना चाहता हूं:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
इस मामले में:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
मैं इसे नीचे दिए गए कोड के साथ करने में कामयाब रहा, लेकिन आदमी यह बदसूरत है। यह पाइथोनिक नहीं है और मुझे यकीन है कि यह या तो पांडा का सबसे कुशल उपयोग नहीं है। मैं प्रत्येक कॉलम के माध्यम से लूप करता हूं और एक फ़ंक्शन को लागू करने वाले कॉलम मास्क के खिलाफ बूलियन रिप्लेसमेंट करता हूं, जो व्हाट्सएप पर मिलान करते हुए प्रत्येक मान की एक रेगेक्स खोज करता है।
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
यह केवल उन क्षेत्रों के माध्यम से पुनरावृत्ति करके थोड़ा अनुकूलित किया जा सकता है जिनमें खाली तार हो सकते हैं:
if df[i].dtype == np.dtype('object')
लेकिन यह बहुत सुधार नहीं है
और अंत में, यह कोड टारगेट स्ट्रिंग्स को कोई नहीं सेट करता है, जो पंडों के कार्यों के साथ काम करता है fillna()
, लेकिन यह पूर्णता के लिए अच्छा होगा यदि मैं वास्तव में NaN
इसके बजाय सीधे सम्मिलित कर सकता हूं None
।
replace
एक रेगेक्स के साथ उपयोग करने में सक्षम हो ... (शायद यह एक सुविधा के रूप में अनुरोध किया जाना चाहिए)।