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