Python Pandas快速更新DataFrame指定列元素的优化方法
Pandas 百万行数据列值映射高性能实现方案
iterrows()逐行遍历是Pandas中性能最差的操作之一:该方法逐行返回Series对象,每次循环都要触发Python层的索引定位、单元素赋值,完全没有利用底层向量化运算能力,百万行规模下会产生几十到上百倍的额外开销,执行耗时过长是必然结果。
直接使用Pandas原生的向量化API实现即可,无Python层循环,运算效率比逐行遍历高100~1000倍,百万行数据可在毫秒级完成处理,代码逻辑和需求完全对齐:
import pandas as pd mmap = {'Current Account':'0', 'New Account':'NEW', 'Closed Account':'CLSD'} else_str = '+01' csv1 = pd.read_csv("csv_file.csv") # 单列批量映射,未匹配到字典键的值统一填充兜底值 csv1["ColumnName"] = csv1["ColumnName"].map(mmap).fillna(else_str)
实现逻辑说明
map(mmap)针对目标列做批量精确值匹配:所有在映射字典中存在的值会被直接替换为对应映射结果,未匹配到的值会被标记为NaNfillna(else_str)把所有标记为NaN的未匹配值,统一替换为指定的兜底值+01- 整个运算过程在C层面完成,没有Python层循环开销,是单值映射场景下性能最优的实现方式
注意:不要在大数据量场景下使用
iterrows()、itertuples()逐行修改DataFrame值,这类方法仅适合小数据量的快速调试,处理十万行以上数据优先选择原生向量化API。
内容的提问来源于stack exchange,提问作者Surachit Sarkar
相关产品推荐
相关产品推荐

