2013-06-13 7 views
32

में डेटाफ्रेम पर "करता नहीं है" के लिए खोजें मैंने कुछ खोज की है और डेटाफ्रेम को df["col"].str.contains(word) द्वारा फ़िल्टर करने का तरीका नहीं समझ सकता है, हालांकि मुझे आश्चर्य है कि क्या करने का कोई तरीका है या नहीं रिवर्स: उस सेट की तारीफ से डेटाफ्रेम फ़िल्टर करें। उदाहरण: !(df["col"].str.contains(word)) के प्रभाव के लिए।पांडा

क्या यह DataFrame विधि के माध्यम से किया जा सकता है?

उत्तर

51

आप की विपरीत (~) ऑपरेटर (जो एक के लिए बूलियन नहीं डेटा की तरह काम करता है) का उपयोग कर सकते हैं:

~df["col"].str.contains(word) 

भी शामिल है के लिए रेगुलर एक्सप्रेशन को स्वीकार करता है ...

+1

बिल्कुल सही! मैं एसईजी-रेगेक्स से परिचित हूं और सोचा कि यह पायथन में अलग था - 're.complies' के साथ बहुत से लेख देखे और खुद को बताया कि मैं बाद में उस पर जाऊंगा। ऐसा लगता है कि मैं खोज को खत्म करता हूं और जैसा कि आप कहते हैं:) – stites

+3

शायद एक पूर्ण उदाहरण सहायक होगा: 'df [~ df.col.str.contains (शब्द)] 'छोड़े गए पंक्तियों के साथ मूल डेटाफ्रेम की एक प्रति देता है शब्द से मेल खाते हैं। –

3

मैं पाने के लिए था उपरोक्त एंडी द्वारा अनुशंसित आदेश का उपयोग करने से पहले नल मूल्यों से छुटकारा पाएं। एक उदाहरण:

~df["second"].str.contains(word) 

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

df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third']) 
df.ix[:, 'first'] = 'myword' 
df.ix[0, 'second'] = 'myword' 
df.ix[2, 'second'] = 'myword' 
df.ix[1, 'third'] = 'myword' 
df 

    first second third 
0 myword myword NaN 
1 myword NaN  myword 
2 myword myword NaN 

अब आदेश चलाकर

TypeError: bad operand type for unary ~: 'float' 

मैं dropna() या fillna का उपयोग कर शून्य मान से छुटकारा मिला() पहले और बिना किसी समस्या के कमांड को पुनः प्रयास किया।

+1

आप '~ df [" second "] का उपयोग भी कर सकते हैं। Astype (str) .str.contains (word)' 'str' में रूपांतरण को मजबूर करने के लिए। Https://stackoverflow.com/questions/43568760/pandas-drop-rows-where-column-contains –

17

मैं नहीं (~) प्रतीक के साथ परेशानी हो रही थी और साथ ही, इसलिए यहाँ एक और StackOverflow thread से एक और तरीका है:

df[df["col"].str.contains('this|that')==False] 
+0

क्या इसे इस तरह जोड़ा जा सकता है? 'डीएफ [डीएफ [" col1 "]। str.contains ('यह' | 'वह') == झूठी और डीएफ [" col2 "]। str.contains ('foo' | 'bar') == True]' ? धन्यवाद! –

+0

हाँ, आप कर सकते हैं। वाक्यविन्यास यहां समझाया गया है: https://stackoverflow.com/questions/22086116/how-do-you-filter-pandas-dataframes-by-multiple-columns –

+1

मुझे 'TypeError: असमर्थित ऑपरेंड प्रकार (ओं) प्राप्त होता है: 'str' और 'str'', शायद आपका मतलब है' यह | वह '? –