pandas列子串替换时跳过None值避免AttributeError的解决方案
Pandas跨列子串替换(自动跳过空值避免报错)实现方法
需求说明
将DataFrame中asker列包含的同索引party列对应子串替换为空,自动跳过asker或party为None的行,避免抛出AttributeError: 'NoneType' object has no attribute 'replace'错误。
测试参考数据
party列数据:
[QQQ, None, RRR-Fraktion]
asker列数据:
[Konrad Munch QQQ, None, Heiko Baer RRR-Fraktion]
可直接使用的实现方案
方案1:apply内置判断(代码简洁,适合中小数据量)
直接在apply的逻辑中加入空值校验,空值行直接返回原值不做处理:
import pandas as pd df1['asker'] = df1.apply( lambda x: x['asker'].replace(x['party'], '') if pd.notna(x['asker']) and pd.notna(x['party']) else x['asker'], axis=1 )
方案2:掩码过滤后操作(性能更高,适合百万级以上大数据量)
先筛选出两列均非空的行,仅对这部分行执行替换操作,避免全局遍历:
import pandas as pd # 生成两列均非空的布尔掩码 valid_mask = df1['asker'].notna() & df1['party'].notna() # 仅对有效行执行替换 df1.loc[valid_mask, 'asker'] = df1.loc[valid_mask].apply( lambda x: x['asker'].replace(x['party'], ''), axis=1 )
运行结果
处理后asker列的值为:
['Konrad Munch ', None, 'Heiko Baer ']
如果需要去掉首尾多余空格,可以在替换逻辑后加.strip()即可。
内容的提问来源于stack exchange,提问作者id345678
相关产品推荐
相关产品推荐

