पंडों को खाली या खाली स्ट्रिंग के साथ NaN बदलें


218

मेरे पास एक पांडास डेटाफ़्रेम है जैसा कि नीचे दिखाया गया है:

    1    2       3
 0  a  NaN    read
 1  b    l  unread
 2  c  NaN    read

मैं एक खाली स्ट्रिंग के साथ NaN मानों को निकालना चाहता हूं ताकि यह ऐसा दिखे:

    1    2       3
 0  a   ""    read
 1  b    l  unread
 2  c   ""    read

जवाबों:


261
import numpy as np
df1 = df.replace(np.nan, '', regex=True)

यह मदद कर सकता है। यह एक खाली स्ट्रिंग के साथ सभी NaN को प्रतिस्थापित करेगा।


1
लाइब्रेरी से क्या np.nanआता है? मैं इसका उपयोग नहीं कर सकता
कैफीन

8
@CaffeineConnoisseur: import numpy as np
जॉन Zwinck

26
@CaffeineConnoisseur - या बस pd.np.nanअगर आप भी नहीं चाहते हैं import numpy
इलास्टैस्टर

1
यह Dict को .csv की पंक्ति में एक स्ट्रिंग के रूप में सहेजने की अनुमति देता है और फिर बाद में एक डेटाफ़्रेम में वापस पढ़ता हैpd.DataFrame.from_dict(eval(_string_))
yeliabsalohcin

5
... inplace=Trueविकल्प का उल्लेख करने के लिए भी उपयोगी है ।
1919

342
df = df.fillna('')

या केवल

df.fillna('', inplace=True)

यह na (जैसे NaN) को भरेगा ''

यदि आप एकल कॉलम भरना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

df.column1 = df.column1.fillna('')

एक का उपयोग कर सकते df['column1']बजाय df.column1


5
@ मैथिल -df[['column1','column2']] = df[['column1','column2']].fillna('')
इलापास्टर

99

यदि आप किसी फ़ाइल से डेटाफ़्रेम (CSV या एक्सेल कह रहे हैं) पढ़ रहे हैं तो उपयोग करें:

  • df.read_csv(path , na_filter=False)
  • df.read_excel(path , na_filter=False)

यह स्वचालित रूप से खाली क्षेत्रों को खाली तारों के रूप में माना जाएगा ''


यदि आपके पास पहले से ही डेटाफ्रेम है

  • df = df.replace(np.nan, '', regex=True)
  • df = df.fillna('')


मैंने अपने आवेदन में इसका उपयोग किया है। यह मौजूद है लेकिन किसी कारण से, उन्होंने डॉक्स में यह तर्क नहीं दिया है। यह त्रुटियों के बिना यद्यपि मेरे लिए अच्छा काम करता है।
नटेश भट्ट

यह काम करता है, मैं इसे पार्स में उपयोग कर रहा हूंxl.parse('sheet_name', na_filter=False)
दिमित्री

5

एक फ़ॉर्मेटर का उपयोग करें, यदि आप केवल इसे प्रारूपित करना चाहते हैं ताकि यह मुद्रित होने पर अच्छी तरह से प्रस्तुत होdf.to_string(... formattersकस्टम स्ट्रिंग-स्वरूपण को परिभाषित करने के लिए, अपने DataFrame को संशोधित किए बिना या स्मृति को बर्बाद करने के लिए उपयोग करें:

df = pd.DataFrame({
    'A': ['a', 'b', 'c'],
    'B': [np.nan, 1, np.nan],
    'C': ['read', 'unread', 'read']})
print df.to_string(
    formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})

लेना:

   A B       C
0  a      read
1  b 1  unread
2  c      read

4
print df.fillna('')स्वयं (बिना किए df = df.fillna('')) मूल को भी संशोधित नहीं करता है। उपयोग करने के लिए कोई गति या अन्य लाभ है to_string?
कल्पनातीत

उचित पर्याप्त है, df.fillna('')यह है!
स्टीव शूलिस्ट

@shadowtalker: जरूरी नहीं, यह केवल सही उत्तर होगा यदि ओपी एक प्रारूप में डीएफ रखना चाहता था (जैसे अधिक कम्प्यूटेशनल रूप से कुशल, या अनावश्यक / खाली / डुप्लिकेट स्ट्रिंग्स पर मेमोरी को सहेजना), फिर भी इसे नेत्रहीन रूप से प्रस्तुत करना मनभावन तरीका। उपयोग-मामले के बारे में अधिक जानकारी के बिना, हम निश्चित रूप से नहीं कह सकते।
19 '23:



0

आप JSON के DataFrame परिवर्तित कर रहे हैं, तो NaNत्रुटि दे देंगे तो सबसे अच्छा समाधान उपयोग के इस मामले को बदलने के लिए है में है NaNके साथ None
यहां कैसे:

df1 = df.where((pd.notnull(df)), None)

0

मैंने नैन के साथ स्ट्रिंग मानों के एक कॉलम के साथ कोशिश की।

नेन को हटाने और खाली स्ट्रिंग भरने के लिए:

df.columnname.replace(np.nan,'',regex = True)

नेन को हटाने और कुछ मान भरने के लिए:

df.columnname.replace(np.nan,'value',regex = True)

मैंने df.iloc की भी कोशिश की। लेकिन इसे कॉलम के इंडेक्स की जरूरत है। इसलिए आपको फिर से तालिका में देखने की आवश्यकता है। बस उपरोक्त विधि ने एक कदम कम कर दिया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.