नैनो के बजाय खाली मान के रूप में खाली मान पढ़ने के लिए pandas.read_csv प्राप्त करें


100

मैं कुछ सीएसवी डेटा में पढ़ने के लिए पांडा लाइब्रेरी का उपयोग कर रहा हूं। मेरे डेटा में, कुछ स्तंभों में तार होते हैं। स्ट्रिंग "nan"एक संभावित मान है, जैसा कि एक रिक्त स्ट्रिंग है। मैं "नान" को एक स्ट्रिंग के रूप में पढ़ने के लिए पांडा प्राप्त करने में कामयाब रहा, लेकिन मैं यह नहीं समझ सकता कि इसे NaN के रूप में एक खाली मान नहीं पढ़ने के लिए कैसे प्राप्त किया जाए। यहाँ नमूना डेटा और आउटपुट है

One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven

>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
    One  Two  Three
0    a    1    one
1    b    2    two
2  NaN    3  three
3    d    4    nan
4    e    5   five
5  nan    6    NaN
6    g    7  seven

यह "नान" को स्ट्रिंग "नैन 'के रूप में सही ढंग से पढ़ता है, लेकिन फिर भी खाली कोशिकाओं को NaN के रूप में पढ़ता है। मैंने read_csv (के साथ ) strके convertersतर्क में पास होने की कोशिश की converters={'One': str}), लेकिन यह अभी भी खाली कोशिकाओं को NaN के रूप में पढ़ता है।

मुझे लगता है कि मैं पढ़ने के बाद मूल्यों को भर सकता हूं, फिलना के साथ, लेकिन क्या वास्तव में पांडा को यह बताने का कोई तरीका नहीं है कि एक विशेष सीएसवी कॉलम में एक खाली सेल को NaN के बजाय एक खाली स्ट्रिंग के रूप में पढ़ा जाना चाहिए?


सरल पर ध्यान दें, keep_default_naनीचे दिए गए हाल के विकल्प का उपयोग करके उत्तर दें ।
nealmcb

जवाबों:


57

मैंने यहाँ किसी प्रकार का एक विकल्प जोड़ने के लिए एक टिकट जोड़ा:

https://github.com/pydata/pandas/issues/1450

इस बीच, result.fillna('')आपको जो चाहिए वो करना चाहिए

EDIT: विकास संस्करण में (0.8.0 अंतिम होने के लिए) यदि आप की एक खाली सूची निर्दिष्ट करते हैं na_values, तो परिणाम में खाली तार खाली रहेंगे।


12
के लिए प्रलेखन DataFrame.fillnaकोशिश करो result.fillna('', inplace=True)। अन्यथा यह डेटाफ्रेम की एक प्रति बनाता है।
सर्गेई ओरशान्स्की

1
इस तरह के एक पुराने जवाब को पुनर्जीवित करने के लिए खेद है, लेकिन क्या कभी ऐसा हुआ? जहाँ तक मैं इस GitHub PR से बता सकता हूँ कि इसे बिना विलय के बंद कर दिया गया था, और मैं पांडा संस्करण में अनुरोधित व्यवहार को 0.14.x नहीं देख रहा हूँ
ड्रामॉक

10
Read_csv के लिए दस्तावेज़ीकरण अब दोनों प्रदान करता है na_values(सूची या स्तंभों द्वारा अनुक्रमित) और keep_default_na(बूल)। keep_default_naमूल्य इंगित करता है कि पांडा 'डिफ़ॉल्ट एनए मूल्यों की जगह या के साथ जोड़ दिया जाना चाहिए। ओपी का कोड वर्तमान में सिर्फ इसलिए काम नहीं करता क्योंकि यह इस ध्वज को याद कर रहा है। इस उदाहरण के लिए, आप उपयोग कर सकते हैं pandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False)
माइकल डेलगाडो

@delgadom मुझे अग्रणी करने के लिए धन्यवाद keep_default_na। लेकिन ध्यान दें कि वह नहीं चाहता कि 'नेन' को एक डिफ़ॉल्ट के रूप में माना जाए। मैंने एक नए उत्तर के रूप में अधिक संपूर्ण स्पष्टीकरण जोड़ा है।
nealmcb

फिर से इस में भाग गया। फिक्स आसान है (सबसे अच्छा जवाब नीचे रखा गया है keep_default_na=False) लेकिन इस पर पांडा का डिफ़ॉल्ट व्यवहार IMO खराब है। अगर किसी कारण से पंडों ने पढा तो_केएसवी एक स्तंभ को संक्रमित नहीं करता है, यह स्वचालित रूप से NaN के लिए खाली तारों को नहीं बदलना चाहिए।
पिएट्रोपेटर

113

अन्य उत्तरों और टिप्पणियों को पढ़ने के बाद भी मैं उलझन में था। लेकिन जवाब अब सरल लगता है, इसलिए यहां आप जाएं।

पंडों के संस्करण ०.१ (२०१२ से) के बाद, आप अपने सीएसवी को खाली सेटिंग के रूप में व्याख्या की गई खाली कोशिकाओं के साथ पढ़ सकते हैं keep_default_na=False:

pd.read_csv('test.csv', keep_default_na=False)

इस मुद्दे को और अधिक स्पष्ट रूप से समझाया गया है

पांडस संस्करण 0.9 के लिए 19 अगस्त 2012 को तय किया गया था


5
यह स्पष्ट रूप से सबसे अच्छा जवाब है, इसे पहले समाधान के रूप में नामित किया जाना चाहिए। धन्यवाद @nealmcb
dzof31

3
यह एक अधिक लोकप्रिय उत्तर क्यों नहीं है? कल से इस समाधान की तलाश में है। धन्यवाद!
अनिश

7

हमारे पास इसके लिए पंडों में एक सरल तर्क है read_csv:

उपयोग:

df = pd.read_csv('test.csv', na_filter= False)

पांडस प्रलेखन स्पष्ट रूप से बताता है कि उपरोक्त तर्क कैसे काम करता है।

संपर्क


ऐसा लगता है कि ओपी की तरह करता है का उपयोग करना चाहते na_values"नेन" पहचान करने के लिए, लेकिन मोड़ na_filterपूरी तरह से बंद है कि हार होगी। इस प्रकार के साथ मेरा जवाब keep_default_na=False
nealmcb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.