寻找pandas DataFrame中iterrows的高效替代方案 实现指定列批量赋值
Pandas 逐列规则赋值的高性能实现方案
核心实现思路
完全摒弃逐行遍历的逻辑,改用pandas原生的向量化操作完成规则赋值,全程无Python层循环开销。
可直接替换原有逻辑的代码
# 预定义需要排除的列,用集合存储可以提升查找效率 exclude_cols = {'raceeth', 'schoolSize', 'studentsInEnglish', 'minutesPerWeekEnglish'} # 从给定的列列表中筛选出真正需要处理的目标列,提前过滤无需处理的列 target_cols = [col for col in missing_col_list if col not in exclude_cols] # 向量化完成值替换:非NaN值标记为1.0,NaN值标记为0.0 target_df[target_cols] = (~target_df[target_cols].isna()).astype(float)
相比原有实现的优化点
- 输出完全等价:最终生成的0.0/1.0标记结果和原有实现完全一致,没有逻辑偏差。同时性能大幅提升:所有计算都在numpy数组层完成,跳过了
iterrows()逐行取值、at逐单元格定位赋值的Python层开销,常规规模下性能是原实现的几十到上百倍,处理十万行以上的大表时优势会更加明显 - 判定更准确:原代码通过把值转字符串后匹配
nan判断缺失值,容易误把字符串值为nan的有效单元格判定为空值,使用pandas内置的isna()判断完全遵循标准空值识别规则,没有判定偏差 - 冗余逻辑删减:提前完成列过滤,不需要在每一行的循环里重复执行多组列名的相等判断,减少了无意义的重复计算
内容的提问来源于stack exchange,提问作者David Le
相关产品推荐
相关产品推荐

