簡體   English   中英

根據與部分字符串的匹配過濾pandas數據幀

[英]Filtering a pandas dataframe based on a match to partial strings

我有一個pandas數據幀,其中包含不同長度和字符的字符串。

例如:

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

會返回這樣的東西:

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

我想要做的是能夠解析列,只返回實際相關的ID,所以基於上面的例子:

Z5QF1X33A
test.user
0000012348
Z5QF1X33A

我認為正則表達式是解決這個問題的一種簡單方法,但到目前為止,我只能為部分情況提出一些硬編碼偽解決方案:

 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和/或pandas方式進行。

嘗試這個:

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  0000012348
3   Z5QF1X33A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM