2013-07-31 10 views
7

मुझे नहीं पता कि पांडा में नाएन का इलाज कैसे किया जा रहा है, कुछ स्पष्टीकरण प्राप्त करने में प्रसन्नता होगी, क्योंकि तर्क मुझे "टूटा हुआ" लगता है।एक पांडा डेटा से ड्रॉप NaNs फ्रेम

मेरे पास एक सीएसवी फ़ाइल है, जो पढ़ने सीएसवी का उपयोग कर लोड हो रहा है। मेरे पास उस फ़ाइल में "टिप्पणियां" कॉलम है, जो कि ज्यादातर बार खाली होता है।

मैंने उस कॉलम को अलग कर दिया है, और कोशिश की है कि खाली मूल्यों को छोड़ने के तरीके अलग-अलग हैं। पहले, जब im लेखन:

marked_results.comments 

मैं:

0  VP 
1  VP 
2  VP 
3  TEST 
4  NaN 
5  NaN 
.... 

स्तंभ के बाकी NaN है। इसलिए पांडा खाली प्रविष्टियों को NaNs के रूप में लोड कर रहा है। अब तक बहुत अच्छा है। अब मैं उन प्रविष्टियों को छोड़ने की कोशिश कर रहा हूं। आईवी ने कोशिश की:

marked_results.comments.dropna() 

और उसी कॉलम को प्राप्त किया। कुछ भी नहीं छोड़ा गया था। उलझन में, मैं समझने के लिए क्यों कुछ भी नहीं गिरा दिया गया था की कोशिश की थी, तो मैं करने की कोशिश की:

marked_results.comments==NaN 

और FALSEs की एक श्रृंखला प्राप्त। कुछ भी नहीं था ... भ्रमित। तो मैं करने की कोशिश की:

marked_results.comments==nan 

और फिर, लेकिन FALSEs कुछ भी नहीं। मुझे वहां थोड़ा पसीना मिला, और समझदार होने लगा। तो मैंने किया:

In [71]: 
comments_values = marked_results.comments.unique() 
comments_values 
Out[71]: 
array(['VP', 'TEST', nan], dtype=object) 

आह, गेट्या! तो अब ive कोशिश की:

marked_results.comments==comments_values[2] 

और आश्चर्यजनक रूप से, अभी भी सभी परिणाम झूठे हैं !!! केवल बात यह है कि काम किया था:

marked_results.comments.isnull() 

जो वांछित परिणाम returnd। क्या कोई स्पष्टीकरण दे सकता है कि यहां क्या खुशी हुई है ??

+1

[NaN! = NaN] (http: // stackoverflow।कॉम/प्रश्न/1565164/क्या-द-द-राशन-फॉर-ऑल-तुलना-रिटर्निंग-झूठी-के लिए यानी 754-नैन-वैल्यू) - स्टीफन कैनन के स्वीकृत उत्तर को पढ़ें। – fvu

उत्तर

14

आप (numpy से पांडा dtypes का उपयोग कर इन और अधिक मजबूत कर रहे हैं) isnull और notnull NaN के लिए परीक्षण करने के लिए उपयोग करना चाहिए, "values considered missing" in the docs देखते हैं।

एक स्तंभ पर सीरीज विधि dropna का उपयोग करते हुए मूल dataframe को प्रभावित नहीं करेगा, लेकिन आप क्या चाहते हैं:

In [11]: df 
Out[11]: 
    comments 
0  VP 
1  VP 
2  VP 
3  TEST 
4  NaN 
5  NaN 

In [12]: df.comments.dropna() 
Out[12]: 
0  VP 
1  VP 
2  VP 
3 TEST 
Name: comments, dtype: object 

dropnaDataFrame विधि एक सबसेट तर्क (पंक्तियाँ जो Nans है ड्रॉप करना पड़ता है विशिष्ट कॉलम में):

In [13]: df.dropna(subset=['comments']) 
Out[13]: 
    comments 
0  VP 
1  VP 
2  VP 
3  TEST 

In [14]: df = df.dropna(subset=['comments']) 
7

आपको math.isnan() फ़ंक्शन (या numpy.isnan) के साथ परीक्षण करने की आवश्यकता है। समानता ऑपरेटर के साथ NaNs की जांच नहीं की जा सकती है।

>>> a = float('NaN') 
>>> a 
nan 
>>> a == 'NaN' 
False 
>>> isnan(a) 
True 
>>> a == float('NaN') 
False 

सहायता समारोह ->

isnan(...) 
    isnan(x) -> bool 

    Check if float x is not a number (NaN). 
+0

बहुत बहुत धन्यवाद, जो भ्रम को हल करता है .. – idoda

संबंधित मुद्दे