繁体   English   中英

熊猫正则表达式,用字符替换组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM