[英]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.