Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas regex,将组替换为char 问题_Python_Regex_Pandas - Fatal编程技术网

Python Pandas regex,将组替换为char 问题

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第一街','

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

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