我只是在学习python / pandas,就像它是多么强大和简洁。
在数据清理期间,我想在数据框中的列上使用regex替换,但我想重新插入部分匹配(组)。
简单示例:
lastname,firstname - > firstname lastname
我尝试了类似下面的内容(实际案例更复杂,所以请原谅简单的正则表达式):
df['Col1'].replace({'([A-Za-z])+, ([A-Za-z]+)' : '\2 \1'}, inplace=True, regex=True)
但是,这会导致空值。匹配部分按预期工作,但值部分不工作。
我想这可以通过一些拆分和合并来实现,但我正在寻找关于是否可以使用正则表达式组替换的一般答案。
我认为您对RegEx有一些问题。
如 @Abdou刚才说 使用其中之一 '\\2 \\1'
或更好 r'\2 \1'
作为 '\1'
是ASCII码的符号 1
如果您使用正确的RegEx,您的解决方案应该有效:
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
建立
df = pd.DataFrame(dict(name=['Smith, Sean']))
print(df)
name
0 Smith, Sean
运用 replace
df.name.str.replace(r'(\w+),\s*(\w+)', r'\2 \1')
0 Sean Smith
Name: name, dtype: object
运用 extract
分成两列
df.name.str.extract('(?P<Last>\w+),\s*(?P<First>\w+)', expand=True)
Last First
0 Smith Sean