Python Pandas regex,将组替换为char 问题
在以下数据帧中,如何将X替换为X:Python Pandas regex,将组替换为char 问题,python,regex,pandas,Python,Regex,Pandas,在以下数据帧中,如何将X替换为X: data={'street':['13XX第一街','2XXX第一街','47X第二大街', “城市”:[“阿什兰”、“斯普林菲尔德”、“阿什兰”]] df=pd.DataFrame(数据) 街道需要编辑,用下划线替换每个X 请注意,整数的数量会发生变化,X的数量也会发生变化。此外,诸如Xerxes之类的街道名称不应编辑为“er”,而应保留未编辑状态。只有街道号码部分应该更改 期望输出 data={'street':['13_uuuuuuuuuu第一街','
data={'street':['13XX第一街','2XXX第一街','47X第二大街',
“城市”:[“阿什兰”、“斯普林菲尔德”、“阿什兰”]]
df=pd.DataFrame(数据)
街道需要编辑,用下划线替换每个X
请注意,整数的数量会发生变化,X的数量也会发生变化。此外,诸如Xerxes之类的街道名称不应编辑为“er”,而应保留未编辑状态。只有街道号码部分应该更改
期望输出
data={'street':['13_uuuuuuuuuu第一街','2_uuuuuuuuuuuuuuuuuuuuuuuuuu第一街','47_uuuuuuuuuuuuuuuuuuuuuuuu,
“城市”:[“阿什兰”、“斯普林菲尔德”、“阿什兰”]]
df=pd.DataFrame(数据)
进展
一些潜在的正则表达式构建块包括:1.[0-9]+捕捉数字
2.X+捕获X
3.([0-9]+)(X+)来捕获组
df['street']替换(“[0-9]+)(X+”,value=r“\2”,regex=True,inplace=False)
我对正则表达式的理解很弱,所以我的方法可能不是最好的。先发制人感谢您的指导或解决方案 假设“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)
IIUC,我们可以将函数传递到
repl
参数,就像re.sub
def repl(m):
return '_' * len(m.group())
df['street'].str.replace(r'([X])+',repl)
如果您只需要在数字之后匹配,我们可以添加一个
'\d{1}'
,它将只在X
df['street'].str.replace(r'\d{1}([X]+)+',repl)
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
您想
\uu
显示X的次数吗?如果它是13XXX
,那么您想要13_u_____;
(三个下划线)?@datanovel正是这样,2 X应该被2替换。X->,XX->,XXX->,XXX->{uuuuuuuuuuuuuuuu。这也将替换123圣诞街
中的X
。这是正确的,设置正则表达式规则,如果它跟在$\d(数值)或$'X'后面,则应该考虑这样的街道名称。如果我不是mistaken@SublimizeD对不起,我没有在问题中做出澄清,但是Quang指出这个要求是正确的。我将编辑这个问题。非常感谢。我无法使函数在df中工作。请替换-您知道为什么吗?它将整个字符串替换为
,您需要.str.replace
,它接受一个函数,而不是replace
。没错,但是如果您想在整个数据帧中进行更改,您需要遍历每一列以使用str.replace
对吗?是的,或者df.apply(lamba x:x.str.replace(…)
这是正确的,您需要str.replace来运行此操作。这不会只需要df.replace。解决方法很好
0 13__ First St
1 2___ First St
2 47_ Second Ave
Name: street, dtype: object