2016-08-01 4 views
5

मैं "NaN" मान वाली पंक्तियों को खत्म करने के लिए डेटाफ्रेम के कई कॉलम पर .notnull() का उपयोग करना चाहता हूं।पांडस में .notnull() का उपयोग करते समय सही सिंटेक्स क्या है?

Let कहते हैं कि मैं निम्नलिखित df है:

A B C 
0 1 1 1 
1 1 NaN 1 
2 1 NaN NaN 
3 NaN 1 1 

मैं इस वाक्य विन्यास का उपयोग करने की कोशिश की, लेकिन यह काम नहीं करता है? क्या आप जानते हैं कि मैं क्या गलत कर रहा हूं?

df[[df.A.notnull()],[df.B.notnull()],[df.C.notnull()]] 

मैं इस त्रुटि मिलती है:

TypeError: 'Series' objects are mutable, thus they cannot be hashed 

मैं निम्नलिखित उत्पादन प्राप्त करने के लिए क्या करना चाहिए?

A B C 
0 1 1 1 

कोई विचार?

+2

तुम बस 'df.dropna (सबसेट = [ 'ए', 'बी' 'सी',]) कर सकते हैं' – ayhan

उत्तर

7

आप पहली बार df[['A','B','C']] स्तंभों की सबसेट का चयन कर सकते notnull लागू तो, और निर्दिष्ट करते हैं तो नकाब में all मूल्यों True हैं:

print (df[['A','B','C']].notnull()) 
     A  B  C 
0 True True True 
1 True False True 
2 True False False 
3 False True True 

print (df[['A','B','C']].notnull().all(1)) 
0  True 
1 False 
2 False 
3 False 
dtype: bool 

print (df[df[['A','B','C']].notnull().all(1)]) 
    A B C 
0 1.0 1.0 1.0 

एक अन्य समाधान dropna साथ Ayhan टिप्पणी से है:

print (df.dropna(subset=['A', 'B', 'C'])) 
    A B C 
0 1.0 1.0 1.0 

जैसा है:

print (df.dropna(subset=['A', 'B', 'C'], how='any')) 

और इसका मतलब है कि सभी पंक्तियां ड्रॉप करें, जहां कम से कम एक NaN मान है।

+0

धन्यवाद, जो निरर्थक ... 'सब के सब के बारे में क्या() 'वह क्या करता है? और यह '.any()' से अलग कैसे है? – MEhsan

+1

'सभी' का अर्थ है कि सभी मान सही हैं या नहीं और 'किसी भी' का अर्थ है कि कम से कम एक मान सही है या नहीं। और यदि 'सभी (1)' या 'किसी भी (1)' का अर्थ है तो इसका मतलब है पंक्तियों की जांच करें, क्योंकि यह 'सभी (अक्ष = 1) 'या' कोई (अक्ष = 1) ' – jezrael

+0

जैसा ही है! बहुत बहुत धन्यवाद मेरे दोस्त – MEhsan

1

आप & ऑपरेटर के साथ संयोजन करके कई स्थितियों को लागू कर सकते हैं (यह न केवल notnull() फ़ंक्शन के लिए काम करता है)।

df[(df.A.notnull() & df.B.notnull() & df.C.notnull())] 
    A B C 
0 1.0 1.0 1.0 

वैकल्पिक रूप से, आप बस सभी स्तंभों जो NaN शामिल छोड़ सकते हैं। मूल डेटाफ्रेम संशोधित नहीं है, इसके बजाय एक प्रति वापस आती है।

df.dropna()

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

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