2016-09-16 87 views
1

我有一個包含不同長度和字符的字符串的熊貓數據框。基於對部分字符串的匹配過濾熊貓數據框

例如:

print df['name'][0] 
print df['name'][1] 
print df['name'][2] 
print df['name'][3] 

會回到這樣的事情:

UserId : Z5QF1X33A 
loginId : test.user 
UserId : 0000; searchText : Cap 
accountSampleToExclude : 0; accountSampleName : Sample Text; UserId : Z5QF1X33A; accountSampleType : Test; accountSample : Test 

我想要做的是能夠通過列解析,只返回實際相關的ID,以便根據上面的例子:

Z5QF1X33A 
test.user 
0000
Z5QF1X33A 

我認爲正則表達式是一個簡單的方法來解決t他,但到目前爲止,我只能夠拿出一些硬編碼的僞解決方案,只有部分情況:

df['name'] = df['name'].str.strip(r'(?<=\UserId :).*') 
df['name'] = df['name'].str.strip(r'(?<=\loginId :).*') 

這將工作類似於

df['name'][0] 
df['name'][1] 

但止跌行不適用於其他案件。任何幫助將不勝感激,我意識到,可以解決它沒有正則表達式,也許只是與str.split()方法,但不知道如何進行pythonic和/或熊貓的方式。

回答

0

試試這個:

In [31]: df.name.str.extract(r'\b(?:UserId|loginId)\s*:\s*\b([^\s]+)\b', expand=True) 
Out[31]: 
      0 
0 Z5QF1X33A 
1 test.user 
2 0000
3 Z5QF1X33A 
+0

該方法適用於例如,然而,有沒有解決這個(不使用正則表達式?)更Python的方式,是不是太冗長。 – astateofsanj

+0

@ user3356075,「使用正則表達式」有什麼問題? – MaxU

相關問題