如何通过循环批量去除字符串中的RD1至RD30标识
批量去除郊区名称中的RDx标识解决方案
嘿,我来帮你搞定这个批量替换的问题!你之前的代码里存在几个语法和逻辑小问题,我给你梳理清楚并提供两种高效的解决办法:
一、修正循环写法的正确实现
你之前的代码在字符串拼接和条件判断上都有错误,这里给你写出能正常运行的循环版本:
# 遍历1到30的数字 for rd in range(1, 31): # 用f-string正确拼接RD+数字的字符串,rf前缀保证是原始字符串(避免转义问题) target_str = rf'RD{rd}' # 直接对整个列执行替换,pandas的replace会自动处理所有包含该字符串的行,无需逐行判断 WorkingData['PatientSuburb'].replace(regex=True, inplace=True, to_replace=target_str, value='')
顺便解决你print输出带空格的问题
之前用print('RD', rd)会自动在参数间添加空格,要输出不带空格的RD1、RD2这类内容,改成这样:
for rd in range(1, 31): print(f'RD{rd}')
或者用字符串拼接的方式:print('RD' + str(rd)),就能得到你想要的无空格输出了。
二、更高效的正则表达式一次性替换(推荐)
循环30次执行替换有点繁琐,我们可以用正则表达式一次性匹配所有RD1到RD30的情况,一次替换完成,效率更高:
# 正则表达式匹配RD后跟随1-30的数字 WorkingData['PatientSuburb'].replace( regex=True, inplace=True, to_replace=r'RD(?:[1-9]|[12]\d|30)', value='' )
正则表达式说明:
RD:匹配字面量的"RD"(?:...):非捕获组,用来分组匹配不同数字范围:[1-9]:匹配1到9的单个数字[12]\d:匹配10到29的数字(1或2后跟任意一位数字)30:精确匹配30
这样就一次性覆盖了所有你需要处理的RDx标识。
内容的提问来源于stack exchange,提问作者kiltannen
相关产品推荐
相关产品推荐

