我有一个pandas数据框,其中包含一个名为“Misc”的catch all列,其中包含可选的字符序列。例如:
Misc
1. xxx=something;yyyblah=somethingelse;xyx=blah
2. xyz=meh;yzxx=random;xyx=meh
我真的只对4-5个价值观/案例感兴趣;我想为这些实例创建新的列并将它们添加到我的数据框架中,如果它们不存在,“.”或NaN。 所以如果我对xxx感兴趣=;和xyx=。。。;我的代码将执行以下操作:
Misc xxx xyx
1. xxx=something;yyyblah=somethingelse;xyx=blah | something | blah
2. xyz=meh;yzxx=random;xyx=meh | . | meh
Misc中的所有信息将以一组20-30个字符串开头,以“;”结尾。我试过使用正则表达式
df['xxx'] = df.Misc.str.extract(r'*(xxx=)*;)$', expand=True)
但这似乎不起作用。我还考虑过简单地删除所有我不关心的实例,然后进行拆分以获得一致性。有什么想法吗
将捕获组更改为在
xxx=
之后匹配,而不是在xxx=
本身之后匹配。(?:;|$)
检查作为终止符的;
或行尾或者您可以^{} 在理解中自动创建这些列:
输出:
计时
我无法得到Andrej的答案来处理我的问题(重新编制索引错误),但以下是包含40K行的其他计时:
请尝试命名组
或
使用
(?<=X)Y
也称为正向查找断言。其中Y
仅当X
位于其左侧时才匹配。用str.extract
链接这个任何一种解决方案都会导致
要展开所有参数,可以使用^{} :
印刷品:
相关问题 更多 >
编程相关推荐