2013-10-03 15 views
17

के साथ पांडा में str.contains() का उपयोग करके मैं सोच रहा हूं कि पांडस में str.contains() फ़ंक्शन का उपयोग करने के लिए एक और अधिक प्रभावी तरीका है, तो दो आंशिक तारों को एक बार में खोजने के लिए। मैं डेटा के लिए डेटाफ्रेम में दिए गए कॉलम को खोजना चाहता हूं जिसमें "nt" या "nv" है। अभी, मेरा कोड इस तरह दिखता है:डेटाफ्रेम

df[df['Behavior'].str.contains("nt", na=False)] 
    df[df['Behavior'].str.contains("nv", na=False)] 

और फिर मैं एक परिणाम दूसरे में जोड़ता हूं। मैं जो करना चाहता हूं वह किसी भी डेटा को खोजने के लिए कोड की एक पंक्ति का उपयोग करता है जिसमें "एनटी" या "एनवी" या "एनएफ" शामिल है। मैंने कुछ तरीकों से खेला है कि मैंने सोचा था कि काम करना चाहिए, जिसमें शब्दों के बीच एक पाइप चिपकाना शामिल है, लेकिन इन सभी में त्रुटियों में परिणाम होता है। मैंने प्रलेखन की जांच की है, लेकिन मुझे इसे एक विकल्प के रूप में नहीं देखा गया है। मुझे इस तरह की त्रुटियां मिलती हैं:

--------------------------------------------------------------------------- 
    TypeError         Traceback (most recent call last) 
    <ipython-input-113-1d11e906812c> in <module>() 
    3 
    4 
    ----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)] 
    6 soctol 

    TypeError: unsupported operand type(s) for |: 'str' and 'str' 

क्या ऐसा करने का कोई तेज़ तरीका है? किसी भी मदद के लिए धन्यवाद, मैं एक नौसिखिया हूं लेकिन डेटा wrangling के लिए पांडा प्यार कर रहा हूँ।

उत्तर

32

The One नियमित अभिव्यक्ति है और एक स्ट्रिंग में होना चाहिए:

"nt|nv" # rather than "nt" | " nv" 
f_recs[f_recs['Behavior'].str.contains("nt|nv", na=False)] 

अजगर आप या (|) तारों पर ऑपरेटर का उपयोग नहीं करता है:

In [1]: "nt" | "nv" 
TypeError: unsupported operand type(s) for |: 'str' and 'str' 
+2

धन्यवाद इस तरह के एक सौंदर्य! । सावधानी बरतें, पाइप और खोज शब्दों के बीच कोई जगह नहीं होनी चाहिए! – jaknap32

+3

@ jaknap32: यदि आप '(? X) 'संशोधक का उपयोग करते हैं, तो आप जहां चाहें रिक्त स्थान जोड़ सकते हैं -' "(? X) nt | nv" '- (लेकिन यदि आपके पास पैटर्न में सार्थक रिक्त स्थान हैं, तो आपको इसकी आवश्यकता होगी उन्हें बचें, साथ ही '#' char)। [पायथन 're.X' दस्तावेज़] देखें (https://docs.python.org/2/library/re.html#re.VERBOSE)। वैसे भी, 'एन [टीवी] '' nt | nv' से बेहतर रेगेक्स है। "Na = झूठी" अभिव्यक्ति के लिए –

+0

+1। मेरे डेटा में अंतराल है और मेरी स्ट्रिंग में फ़ंक्शन शामिल नहीं होगा। –