我刚刚学习 python/pandas,喜欢它的强大和简洁。
在数据清理期间,我想使用正则表达式对数据框中的列进行替换,但我想重新插入匹配的部分(组)。
简单示例:
姓氏、名字 -> 名字 姓氏
我尝试了类似以下的内容(实际情况更复杂,所以请原谅简单的正则表达式):
df['Col1'].replace({'([A-Za-z])+, ([A-Za-z]+)' : '\2 \1'}, inplace=True, regex=True)
但是,这会导致空值。匹配部分按预期工作,但值部分则不然。
我想这可以通过一些拆分和合并来实现,但我正在寻找关于正则表达式组是否可以用于替换的一般答案。
我认为您对正则表达式有一些问题。
As @阿卜杜刚刚说过 https://stackoverflow.com/questions/41472951/using-regex-matched-groups-in-pandas-dataframe-replace-function/41473130#comment70152014_41472951使用任一'\\2 \\1'
或更好r'\2 \1'
, as '\1'
是带有ASCII码的符号1
如果您使用正确的正则表达式,您的解决方案应该有效:
In [193]: df
Out[193]:
name
0 John, Doe
1 Max, Mustermann
In [194]: df.name.replace({r'(\w+),\s+(\w+)' : r'\2 \1'}, regex=True)
Out[194]:
0 Doe John
1 Mustermann Max
Name: name, dtype: object
In [195]: df.name.replace({r'(\w+),\s+(\w+)' : r'\2 \1', 'Max':'Fritz'}, regex=True)
Out[195]:
0 Doe John
1 Mustermann Fritz
Name: name, dtype: object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)