Pandas regex,将组替换为char

2024-05-17 06:58:20 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

在以下数据帧中,如何将X替换为X:

data = {'street':['13XX First St', '2XXX First St', '47X Second Ave'], 
        'city':['Ashland', 'Springfield', 'Ashland']} 
df = pd.DataFrame(data) 

街道需要编辑,用下划线替换每个X

请注意,整数的数量会发生变化,X的数量也会发生变化。此外,诸如Xerxes之类的街道名称不应编辑为“er”,而应保留未编辑状态。只有街道号码部分应该更改

期望输出

data = {'street':['13__ First St', '2___ First St', '47_ Second Ave'], 
        'city':['Ashland', 'Springfield', 'Ashland']} 
df = pd.DataFrame(data) 

进展

一些潜在的正则表达式构建块包括:
1.[0-9]+捕捉数字
2.X+捕获X
3.([0-9]+)(X+)来捕获组

df['street']replace("[0-9]+)(X+)", value=r"\2", regex=True, inplace=False)

我对正则表达式的理解很弱,所以我的方法可能不是最好的。先发制人感谢您的指导或解决方案


Tags: 编辑streetcitydataframedfdata数量街道
3条回答

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)

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

假设“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)

相关问题 更多 >