[英]Pandas regex, replace group with char
给定以下数据框,如何用 _ 替换 X:
data = {'street':['13XX First St', '2XXX First St', '47X Second Ave'],
'city':['Ashland', 'Springfield', 'Ashland']}
df = pd.DataFrame(data)
需要编辑街道,用下划线 _ 替换每个 X。
请注意,整数的数量会发生变化,X 的数量也会发生变化。 此外,不应将诸如 Xerxes 之类的街道名称编辑为 _er_es,而应保持不变。 只有街道号码部分应该改变。
data = {'street':['13__ First St', '2___ First St', '47_ Second Ave'],
'city':['Ashland', 'Springfield', 'Ashland']}
df = pd.DataFrame(data)
一些潜在的正则表达式构建块包括:
1. [0-9]+ 捕捉数字
2. X+ 捕获 Xs
3. ([0-9]+)(X+) 捕获组
df['street']replace("[0-9]+)(X+)", value=r"\2", regex=True, inplace=False)
我对正则表达式很不擅长,所以我的方法可能不是最好的。 抢先谢谢大家的指点或解决方法!
IIUC,这会做:
def repl(m):
return m.group(1) + '_'*len(m.group(2))
df['street'].str.replace("^([0-9]+)(X*)", repl)
输出:
0 13__ First St
1 2___ First St
2 47_ Second Ave
Name: street, dtype: object
IIUC,我们可以像re.sub
一样将函数传递给repl
参数
def repl(m):
return '_' * len(m.group())
df['street'].str.replace(r'([X])+',repl)
out:
0 13__ First St
1 2___ First St
2 47_ Second Ave
Name: street, dtype: object
如果您只需要匹配数字,我们可以添加一个'\\d{1}'
,它只会在X
的单个实例之后匹配
df['street'].str.replace(r'\d{1}([X]+)+',repl)
假设 'X' 只出现在 'street' 列中
streetresult=re.sub('X','_',str(df['street']))
你想要的输出应该是结果
我测试的代码
import pandas as pd
import re
data = {'street':['13XX First St', '2XXX First St', '47X Second Ave'],
'city':['Ashland', 'Springfield', 'Ashland']}
df = pd.DataFrame(data)
for i in data:
streetresult=re.sub('X','_',str(df['street']))
print(streetresult)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.