根据与部分字符串的匹配过滤pandas数据帧

时间:2016-09-16 17:16:52

标签: python regex string pandas split

我有一个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方式进行。

1 个答案:

答案 0 :(得分: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  0000012348
3   Z5QF1X33A