如何在Pandas中高效处理缺失值并完成行级计算
发布时间 - 2026-01-09 00:00:00 点击率:次
本文介绍如何使用pandas的`fillna(0)`方法批量将dataframe中的nan值替换为0,并结合向量化操作替代低效的`iterrows()`循环,显著提升数据处理性能与代码可维护性。
在数据分析实践中,频繁遇到含缺失值(NaN)的CSV表格需进行数值计算——例如按行加权求和、条件赋值等。原始代码中采用iterrows()逐行遍历并手动float()转换,不仅性能低下(尤其对万行以上数据),还易因NaN引发ValueError或TypeError,且嵌套的try-except掩盖了真正的数据质量问题。
最优解:向量化预处理 + 向量化计算
首先,用df.fillna(0)一次性将所有NaN替换为0(若仅需特定列,可传入字典:df.fillna({'first column': 0, 'second column': 0}))。随后,直接通过列名索引获取数值列,利用Pandas内置的向量化运算完成计算,彻底避免Python循环:
import pandas as pd
import numpy as np
# 读取数据(推荐添加dtype参数避免类型推断错误)
df = pd.read_csv('documents/doc.csv',
error_bad_lines=False, # 已弃用,建议改用on_bad_lines='skip'
on_bad_lines='skip')
# 步骤1:统一填充NaN为0(安全且高效)
df = df.fillna(0)
# 步骤2:提取目标列并转为数值类型(自动处理空字符串等异常)
cols = ["first column", "second column", "third column", "fourth column", "fifth column"]
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce').fillna(0)
# 步骤3:向量化计算(无需循环)
var1, var2, var3 = df["first column"], df["second column"], df["third column"]
var4, var5 = df["fourth column"], df["fifth column"]
# 构建布尔掩码:var4为0或原为NaN(现已被fill为0)
mask_var4_zero = (var4 == 0)
# 分别计算两种逻辑下的结果
final_grade = np.where(
mask_var4_zero,
np.round(0.25 * (var1 + var2 + var3) / 3 + 0.75 * var5, 1),
np.round(0.166 * (var1 + var2 + var3) / 3 + 0.33 * var4 + 0.5 * var5, 1)
)
# 将结果写入新列
df['final_grade'] = final_grade关键优势与注意事项:
- ✅ 性能提升:向量化操作比iterrows()快10–100倍,且内存友好;
- ✅ 健壮性增强:pd.to_numeric(..., errors='coerce')将非法字符串转为NaN,再经fillna(0)统一处理,避免float()抛异常;
- ⚠️ 避免隐式类型转换:勿依赖row["col"]自动转float,原始CSV中数字可能被读为字符串;
- ⚠️ 跳过首行? 若首行为标题,read_csv默认已处理,无需i==0: continue;若确需跳过首数据行,用skiprows=1参数更清晰;
- ? 调试建议:用df.isna().sum()检查各列缺失值分布,用df.dtypes确认列数据类型,再决定是否需要astype(float)。
最终,该方案将冗长易错的循环逻辑压缩为几行声明式代码,兼具可读性、可维护性与生产级鲁棒性。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在万网利用已有域名快速建站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
HTML 中如何正确使用模板变量为元素的 name 属性赋值
制作旅游网站html,怎样注册旅游网站?
简历没回改:利用AI润色让你的文字更专业
详解Android中Activity的四大启动模式实验简述
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
iOS UIView常见属性方法小结
西安专业网站制作公司有哪些,陕西省建行官方网站?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Python面向对象测试方法_mock解析【教程】
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
创业网站制作流程,创业网站可靠吗?
昵图网官方站入口 昵图网素材图库官网入口
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
如何快速辨别茅台真假?关键步骤解析
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
如何挑选最适合建站的高性能VPS主机?
如何在服务器上三步完成建站并提升流量?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
海南网站制作公司有哪些,海口网是哪家的?
Laravel中的withCount方法怎么高效统计关联模型数量
青岛网站建设如何选择本地服务器?
JS中对数组元素进行增删改移的方法总结
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel如何创建自定义Facades?(详细步骤)
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何在云虚拟主机上快速搭建个人网站?
如何快速使用云服务器搭建个人网站?

