2012-09-20 22 views
7

मैं pandas.read_csv का उपयोग कर अनुपलब्ध मानों के साथ .txt पढ़ने की कोशिश करता हूं। मेरा डेटा प्रारूप का है:पाइथन पांडा में लापता मूल्यों के साथ फ़ाइल पढ़ने

10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 

बिंदुओं, जीपीएस स्थिति और अन्य रीडिंग के समान नाम वाले हजारों नमूनों के साथ। मैं एक कोड का उपयोग करें:

myData = read_csv('~/data.txt', sep=',', na_values='') 

कोड na_values ​​के रूप में गलत है NaN या अन्य सूचक देता नहीं है। कॉलम का आकार समान होना चाहिए लेकिन मैं अलग-अलग लंबाई के साथ समाप्त होता हूं।

मुझे नहीं पता कि na_values ​​के बाद वास्तव में क्या टाइप किया जाना चाहिए (सभी अलग-अलग चीजों को आजमाएं)। धन्यवाद

+0

यदि आप 'skiprows = 1' हैं, तो फ़ाइल में एक पंक्ति है। उस पैरामीटर के बिना मैं डेटाफ्रेम में स्पष्ट 'NaN' देखता हूं। – eumiro

+0

मैंने अपना प्रारूप दिखाने के लिए अपने डेटा की केवल दो पंक्तियां पोस्ट की हैं। skiprows = 1 अनुपलब्ध डेटा के साथ कुछ भी नहीं करता है, मूल फ़ाइल में 15000 लाइनें होती हैं और पहली पंक्तियों में कुछ नाम शामिल होते हैं, जो मैं नहीं चाहता हूं। – tomasz74

+0

मैंने स्पष्टता के लिए 'skiprows = 1' हटा दिया – tomasz74

उत्तर

11

पैरामीटर na_values "जैसे सूची" होना चाहिए (यह answer देखें)।

na_values='' 
# is equivalent to 
na_values=[] # and this is not what you want! 

इसका मतलब यह है कि आप na_values=[''] उपयोग करने की आवश्यकता:

एक स्ट्रिंग "सूची की तरह" इतनी है:

na_values='abc' # would transform the letters 'a', 'b' and 'c' each into `nan` 
# is equivalent to 
na_values=['a','b','c']` 

इसी तरह।

+0

आपके उत्तर के लिए धन्यवाद। na_values ​​= [''] मेरी पहली कोशिश थी लेकिन यह वांछित प्रभाव नहीं देती है। मेरे पास एक ही परिणाम है यदि मैं एक सूची [''] या रिक्त स्थान के रूप में तर्क लेता हूं। मुझे वास्तव में पता नहीं है कि कोशिश करने के लिए और क्या करना है क्योंकि ऐसा लगता है कि यह स्वचालित रूप से गुम मूल्यों को नहीं उठाता है और मुझे इसे निर्दिष्ट करने में कोई समस्या है – tomasz74

+1

@ tomasz74 यह आपके उदाहरण के साथ काम करता है (बिना 'skiprows') ... शायद आपको 'myData.T' (transpose) की आवश्यकता है। –

+0

@ tomasz74 परीक्षण के बाद ऐसा लगता है कि '' '', और डिफ़ॉल्ट रूप से ('कोई नहीं ') यह सिर्फ मेरे लिए ठीक काम करता है (कॉलम एक ही आकार हैं) ... –

2

पांडा का कौन सा संस्करण आप पर हैं? खाली स्ट्रिंग को व्याख्या करना क्योंकि NaN पांडा के लिए डिफ़ॉल्ट व्यवहार है और na_values पैरामीटर का उपयोग किए बिना v0.7.3 और वर्तमान मास्टर दोनों में आपके डेटा स्निपेट में खाली तारों को ठीक से पार्स करने लगता है।

In [10]: data = """\ 
10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 
""" 

In [11]: read_csv(StringIO(data), header=None).T 
Out[11]: 
        0   1 
X.1  10/08/2012 10/08/2012 
X.2   12:10:10 12:10:11 
X.3   name1  name2 
X.4    0.81   NaN 
X.5    4.02   NaN 
X.6 50;18.5701400N   NaN 
X.7 4;07.7693770E   NaN 
X.8    7.92  10.87 
X.9    10.5   1.4 
X.10   0.0106  0.0099 
X.11    4.3   9.7 
X.12   0.0301  0.0686 
संबंधित मुद्दे