繁体   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