如何不使用iterrows高效实现pandas DataFrame列值按字典映射替换
高效实现方案
直接用pandas原生的map矢量化方法即可,完全不需要逐行遍历,1万条数据毫秒级就能完成,性能比iterrows高几十倍。
优化后代码
# 先将Subtest列转为字符串,再用字典映射,插入到第4位 df.insert(4, 'ctqparam', df['Subtest'].astype(str).map(ctqparam_dict)) # 删除原Subtest列 df = df.drop(columns=['Subtest'])
可选边界处理
如果需要对字典中未匹配到的值做处理,可以加fillna:
- 保留原值:
df.insert(4, 'ctqparam', df['Subtest'].astype(str).map(ctqparam_dict).fillna(df['Subtest']))
- 填充指定默认值(比如空字符串、
未匹配等):
df.insert(4, 'ctqparam', df['Subtest'].astype(str).map(ctqparam_dict).fillna(''))
性能优势说明
iterrows逐行遍历会在Python层循环,每次都要生成行对象,额外开销极高。map是pandas底层C实现的矢量化操作,没有Python层循环开销,不管是小数据量还是几十万以上的大数据量,性能都远优于手动遍历。
内容的提问来源于stack exchange,提问作者Sultanust
相关产品推荐
相关产品推荐

