2015-12-15 10 views
8

मैं NaN युक्त पंक्तियों को छोड़ने के लिए pandas.DataFrame.dropna विधि का उपयोग कर रहा हूं। यह फ़ंक्शन एक डेटाफ्रेम देता है जो दस्तावेज़ों में दिखाए गए अनुसार पंक्तियों को छोड़ देता है।पांडस ड्रॉपना - स्टोर पंक्तियों को छोड़ दिया

मैं अलग पंक्तियों की एक प्रति को अलग डेटाफ्रेम के रूप में कैसे स्टोर कर सकता हूं? है:

mydataframe[pd.isnull(['list', 'of', 'columns'])] 

हमेशा कि dropna subset=['list', 'of', 'columns'] साथ कहा जाता है यह सोचते ही पंक्तियों बूँदें dropna वापस जाने के लिए गारंटी,?

उत्तर

10

एनए मुक्त डेटाफ्रेम के विपरीत देने के लिए आप unary ~ (invert) operator का उपयोग करके मूल डेटाफ्रेम को अनुक्रमणित करके ऐसा कर सकते हैं।

na_free = df.dropna() 
only_na = df[~df.index.isin(na_free.index)] 

एक अन्य विकल्प ufunc implementation of ~ उपयोग करने के लिए किया जाएगा।

only_na = df[np.invert(df.index.isin(na_free.index))] 
+0

मुझे वास्तव में इस समाधान का समाधान पसंद है। ध्यान दें कि ''' '' '' के पक्ष में बहिष्कृत कर दिया गया है। – johnchase

2

मैं एक टिप्पणी छोड़ने जा रहा था, लेकिन मुझे लगा कि मैं एक जवाब लिखूंगा क्योंकि यह काफी जटिल हो रहा है। निम्न डेटा फ्रेम से शुरू करें: जो this post

से जवाब पर आधारित है:

import pandas as pd 
import numpy as np 
df = pd.DataFrame([['a', 'b', np.nan], [np.nan, 'c', 'c'], ['c', 'd', 'a']], 
       columns=['col1', 'col2', 'col3']) 
df 
    col1 col2 col3 
0 a b NaN 
1 NaN c c 
2 c d a 

और कहते हैं कि हम करना चाहते हैं स्तंभों में Nans साथ पंक्तियों रखने col2 और col3 एक तरीका यह है के लिए निम्न है

df.loc[pd.isnull(df[['col2', 'col3']]).any(axis=1)] 

    col1 col2 col3 
0 a b NaN 

तो यह हमें उन पंक्तियों को देता है जो गिराए जाएंगे यदि हमने रुचि के कॉलम में नैन के साथ पंक्तियां गिरा दीं। कॉलम हम एक ही कोड चला सकते हैं रखने के लिए, लेकिन एक ~ का उपयोग चयन को उलटने के लिए

df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)] 

    col1 col2 col3 
1 NaN c c 
2 c d a 

इस के बराबर है:

df.dropna(subset=['col2', 'col3']) 

कौन सा हम कर सकते हैं टेस्ट:

df.dropna(subset=['col2', 'col3']).equals(df.loc[~pd.isnull(df[['col2', 'col3']]).any(axis=1)]) 

True 

आप निश्चित रूप से अपने स्वयं के बड़े डेटा फ्रेम पर इसका परीक्षण कर सकते हैं लेकिन एक ही जवाब प्राप्त करना चाहिए।

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