查找正则表达式并在数据帧中仅修改其一部分

2024-09-29 21:35:55 发布

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

假设我有几个值,比如

test_val1 = 'E 18TH ST AND A AVE'
test_val2 = 'E 31ST ST AND A AVE'

我想找到18、31等,并用18/31替换它-基本上去掉后缀,但保留整个字符串

期望值

test_val1 = 'E 18 ST AND A AVE'
test_val2 = 'E 31 ST AND A AVE'

请注意,我不想删除与“street”对应的“St”,因此无法进行盲板更换

我的方法是使用下面的方法(目前用于“th”),但它不起作用,因为函数无法将值/文本保存在内存中以返回它

import regex as re
test_val1.replace('\d{1,}TH', '\d{1,}', regex=True)

我有一列充满了这些值,所以我可以在Pnadas列上运行/应用的解决方案将非常有用


Tags: and方法字符串teststreet后缀regexst
3条回答

您提到它不起作用,因为函数无法将值/文本保留在内存中以返回它。是否强制不将值存储到其他变量

t1 = 'E 18TH ST AND A AVE'

for t1 in column:    #t1 is address in the dataframe column

t2 = t1.split()
    
t2[1] = re.sub(r'(TH|ST)', '',t2[1])
    
 t1 = ' '.join(t2)

对于以下示例数据帧

df = pd.DataFrame({"Test": ['E 18TH ST AND A AVE', 'E 31ST ST AND A AVE']})
                  Test
0  E 18TH ST AND A AVE
1  E 31ST ST AND A AVE

这个

df.Test = df.Test.str.replace(r'(\d+)(TH|ST)', lambda m: m.group(1), regex=True)

产生

                Test
0  E 18 ST AND A AVE
1  E 31 ST AND A AVE

这就是你要找的吗?查看docs了解更多详细信息

lambda函数用作repl函数(“replace”),其返回的replace模式与字符串中的模式匹配。根据定义,它获取相应的match object作为参数,并且必须返回一个字符串,该字符串通常派生自match对象,但它可能完全不相关。这里的函数返回1的内容。通过match object method ^{}捕获组:(\d+)-部分

我想我可以帮你更换正则表达式。看起来您想要使用的函数实际上是sub,而不是replace。 这是函数签名:

re.sub(pattern, repl, string[, count, flags])

检查official documentation

另外here是对类似问题的杰出回答

相关问题 更多 >

    热门问题