如何在Pandas DataFrame中按行通过正则匹配替换字符串指定部分
解决方法
你可以直接通过简单的字符串判断+替换实现需求,有两种常用写法:
写法1:apply实现(适合小数据量)
df['final result'] = df['final result'].apply(lambda x: x if x == '|Other' else x.replace('|Other', ''))
写法2:向量化操作(适合大数据量,性能更高)
# 先筛选出值不等于|Other的行,只对这些行做替换 mask = df['final result'] != '|Other' df.loc[mask, 'final result'] = df.loc[mask, 'final result'].str.replace(r'\|Other', '', regex=True)
原代码不生效的原因
- 你直接对
df['final result']这个单列Series调用apply时,lambda接收的参数x就是每个单元格的字符串本身,不需要再写x['final result'],这是混淆了Series.apply和DataFrame.apply的用法,会直接触发KeyError。 - 原有逻辑和需求完全不符:你写的逻辑是「如果值等于|Other就替换成x,否则保留原值」,既没有做子串删除,判断规则也完全反过来了。
内容的提问来源于stack exchange,提问作者TeoK
相关产品推荐
相关产品推荐

