2015-01-15 12 views
16

मैं दिनांक कॉलम का मान दिनांकों की सूची में है, जब मैं पांडा डेटाफ्रेम से पंक्तियां छोड़ना चाहता हूं। निम्नलिखित कोड काम नहीं करता:"इन" स्थिति के आधार पर डेटाफ्रेम से पंक्तियों को छोड़ना

a=['2015-01-01' , '2015-02-01'] 

df=df[df.datecolumn not in a] 

मैं निम्नलिखित त्रुटि मिलती है:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

उत्तर

19

आप pandas.Dataframe.isin का उपयोग कर सकते हैं।

pandas.Dateframe.isin प्रत्येक तत्व सूची a या नहीं के आधार पर बूलियन मान वापस करेगा। इसके बाद आप इसे ~ के साथ True से False और इसके विपरीत रूपांतरित करने के लिए उलटा करें।

import pandas as pd 

a = ['2015-01-01' , '2015-02-01'] 

df = pd.DataFrame(data={'date':['2015-01-01' , '2015-02-01', '2015-03-01' , '2015-04-01', '2015-05-01' , '2015-06-01']}) 

print(df) 
#   date 
#0 2015-01-01 
#1 2015-02-01 
#2 2015-03-01 
#3 2015-04-01 
#4 2015-05-01 
#5 2015-06-01 

df = df[~df['date'].isin(a)] 

print(df) 
#   date 
#2 2015-03-01 
#3 2015-04-01 
#4 2015-05-01 
#5 2015-06-01 
+0

यह काम करता है .. धन्यवाद –

8

आप उपयोग कर सकते हैं isin:

df = df[~df.datecolumn.isin(a)] 

त्रुटि संदेश सुझाव दिया गया है कि all() या any() कर सकते हैं इस्तेमाल किया जाए, वे केवल तभी उपयोगी होते हैं जब आप परिणाम को एक एकल बूलियन मान में कम करना चाहते हैं। हालांकि, अब आप जो करने की कोशिश कर रहे हैं, वह बाहरी सूची के खिलाफ श्रृंखला में प्रत्येक मूल्य की सदस्यता का परीक्षण नहीं करना है, और परिणामों को बरकरार रखना है (यानी, एक बूलियन श्रृंखला जिसका उपयोग मूल डेटाफ्रेम को टुकड़ा करने के लिए किया जाएगा)।

आप Gotchas में इसके बारे में और अधिक पढ़ सकते हैं।

+0

यह काम किया .. धन्यवाद –

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