2017-08-23 9 views
5

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

|  A  |    B      | 
|-------------|-----------------------------------| 
| VALID |asdfafX'XextractthisY'Yeaaadf  | 
| INVALID |secondrowX'XsubtextY'Yelakj  | 
| VALID |secondrowX'XextractthistooY'Yelakj | 

|  A  |    B      |  C   | 
|-------------|-------------------------------------|-----------------| 
| VALID |"asdfafX'XextractthisY'Yeaaadf"  | extractthis  | 
| INVALID |"secondrowX'XsubtextY'Yelakj"  | NA    | 
| VALID |"secondrowX'XextractthistooY'Yelakj" | extractthistoo | 

कुछ बातें ध्यान रखें:

-इस-स्ट्रिंग हमेशा वाक्यांश "X'X" के बाद शुरू करने और खत्म हो जाएगा सही "Y'Y" से पहले।

-सबस्ट्रिंग सेल से सेल तक अलग-अलग लंबाई का होगा।

मैं जानता हूँ कि निम्नलिखित कोड गलत है, लेकिन मैं कैसे मैं इस समस्या को हल करने का प्रयास किया गया है पर आप दिखाना चाहते थे:

import pandas as pd 

if df[A] == "VALID": 
    df[C] = df[B]df.str[start:finish] 
else: 
    df[C].isna() 

मैं इस बुनियादी कोड में त्रुटियों के लिए क्षमा चाहते हैं, के रूप में मैं नया हूँ पूरी तरह से पाइथन के लिए और अभी भी मुझे मार्गदर्शन करने के लिए एक आईडीई और परीक्षण & त्रुटि पर भरोसा करते हैं। कोई भी सहायता जो आप प्रदान कर सकते हैं उसकी सराहना की जाती है।

उत्तर

3

आप उपयोग कर सकते हैं pd.Series.str.extract:

In [737]: df 
Out[737]: 
     A         B 
0 VALID  asdfafX'XextractthisY'Yeaaadf 
1 INVALID   secondrowX'XsubtextY'Yelakj 
2 VALID secondrowX'XextractthistooY'Yelakj 

In [745]: df['C'] = df[df.A == 'VALID'].B.str.extract("(?<=X'X)(.*?)(?=Y'Y)", expand=False) 

In [746]: df 
Out[746]: 
     A         B    C 
0 VALID  asdfafX'XextractthisY'Yeaaadf  extractthis 
1 INVALID   secondrowX'XsubtextY'Yelakj    NaN 
2 VALID secondrowX'XextractthistooY'Yelakj extractthistoo 

regex पैटर्न है:

(?<=X'X)(.*?)(?=Y'Y) 
  • (?<=X'X) के लिए X'X

  • (.*?) एक lookbehind है से मेल खाता है lookbehind एक के बीच सब कुछ nd अग्रावलोकन

  • (?=Y'Y)Y'Y

+2

के लिए एक अग्रदर्शी मुझे लगता है कि आप के लिए सिर्फ 'df [ 'सी'] = df [df.A == 'वैध']। B.str को आसान बनाने में कर सकते हैं। निकालें ("(? <= एक्सएक्स) (। *?) (? = वाई'वाय)") ',' डीएफ ['सी'] 'शुरू करने की कोई ज़रूरत नहीं है,' NaN' डिफ़ॉल्ट है। – AChampion

+0

बिल्कुल सही। वह चाल है! इसए लिए तुम्हारी मदद के लिए धन्यवाद। – ParalysisByAnalysis

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