在给出以下数据框的情况下,如何用_替换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)
我对正则表达式非常不满意,所以我的方法可能不是最好的方法。抢先感谢您的任何指导或解决方案!
答案 0 :(得分:3)
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
答案 1 :(得分:2)
IIUC,我们可以将函数传递给repl
参数,就像re.sub
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)
答案 2 :(得分:0)
假设“ X”仅出现在“街道”列中
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)