京公网安备 11010802034615号
经营许可证编号:京B2-20210330
在用 Python(如 pandas 库)处理 Excel 数据时,“缺失值” 是高频痛点 ——Excel 表中的空白单元格、“N/A” 标记或格式错误,导入后常会转化为 pandas 中的NaN(Not a Number)值。这些缺失值若不处理,会导致统计分析偏差(如均值计算不准)、模型训练报错(如机器学习算法无法识别NaN)。而dropna作为 pandas 中删除缺失值的核心函数,是解决这一问题的关键工具。本文将从 Excel 数据缺失场景出发,全面解析dropna的作用、参数配置与实战用法,帮助读者高效完成数据清洗。
在用dropna处理缺失值前,需先明确 Excel 数据缺失的根源与影响,避免 “盲目删除” 导致数据浪费。
Excel 作为手动录入、多表合并的常用工具,缺失值的产生往往与操作场景相关:
手工录入遗漏:如员工信息表中,部分员工的 “入职日期”“联系方式” 因录入疏忽未填写,形成空白单元格;
数据格式不兼容:Excel 表中混合文本与数值格式(如 “年龄” 列既有数字 “25”,又有文本 “待补充”),导入 pandas 时文本内容会被识别为NaN;
多表合并残留:将 Excel 表 “销售数据” 与 “客户信息” 合并时,部分客户无匹配的销售记录,导致 “销售额”“订单号” 列出现NaN;
系统导出缺陷:从业务系统导出 Excel 数据时,因字段未配置或接口异常,部分列(如 “物流单号”)自动填充为空白。
若直接用含缺失值的 Excel 数据做分析,会引发一系列问题:
统计结果失真:计算 “平均销售额” 时,NaN值会被自动排除,若缺失值占比高(如 30%),会导致均值偏离真实水平;
可视化错误:用含NaN的 “月度销量” 列绘制折线图时,会出现断点或空白区域,无法完整呈现趋势;
dropna是 pandas 库中专门用于 “删除含NaN值的行或列” 的函数,其核心作用可概括为:通过灵活配置参数,选择性剔除数据集中 “无效的行 / 列”,保留完整、可用的数据样本,为后续分析(如统计计算、建模)扫清障碍。
简单来说,当 Excel 导入的数据表存在 “某行多个字段缺失”“某列全是空白” 时,dropna能帮你快速筛选出 “无缺失的有效数据”—— 例如,删除 “销售额” 列缺失的行,避免这些无效数据影响 “月度销售总额” 的计算。
处理缺失值的方法还有 “填充法”(如用均值、中位数填充,fillna函数),但dropna的优势在于:
当缺失值对应的是 “无效样本”(如 Excel 表中 “订单号” 缺失的行,无实际业务意义),删除是最合理的选择,避免填充导致的虚假数据。
dropna的灵活性体现在参数配置上 —— 通过调整axis(方向)、how(删除条件)、subset(指定列)等参数,可精准控制删除范围,避免误删有用数据。以下是 Excel 数据处理中最常用的 4 个参数:
| 参数名 | 取值范围 | 核心作用 | Excel 数据场景示例 |
|---|---|---|---|
axis |
0(默认)/1 | 0 = 删除含缺失值的行;1 = 删除含缺失值的列 | 若 Excel “用户表” 中部分行的 “手机号” 缺失→用axis=0删行;某列 “备注” 全是空白→用axis=1删列 |
how |
'any'(默认)/'all' | 'any'= 行 / 列只要有一个缺失值就删除;'all'= 行 / 列所有值都缺失才删除 | 若 Excel “订单表” 中某行 “订单号” 缺失(其他字段完整)→'any' 会删除该行;某行全空白→'all' 才删除 |
subset |
列表(如 [' 列 1',' 列 2']) | 仅针对指定列的缺失值判断是否删除行(仅对axis=0生效) |
仅关注 Excel “销售表” 中 “销售额”“订单日期” 列的缺失值→subset=['销售额','订单日期'],其他列缺失不影响 |
thresh |
整数(如 3) | 行 / 列至少有 N 个非缺失值才保留,否则删除(与how互补) |
Excel “产品表” 需保留 “产品 ID、名称、价格”3 个核心列无缺失的行→thresh=3 |
结合 Excel 数据的常见缺失情况,以下用 pandas 代码演示dropna的实战应用,从 “导入 Excel” 到 “删除缺失值” 形成完整流程。
首先需安装 pandas 和读取 Excel 的依赖库(openpyxl用于读取.xlsx 格式,xlrd用于.xls 格式):
pip install pandas openpyxl xlrd
假设我们有一份 Excel 文件sales_data.xlsx,包含 “订单号、客户 ID、销售额、订单日期、物流单号”5 列,导入后的数据如下(含缺失值):
| 订单号 | 客户 ID | 销售额 | 订单日期 | 物流单号 |
|---|---|---|---|---|
| 1001 | C001 | 500.0 | 2024-01-01 | SF123 |
| 1002 | NaN | 800.0 | 2024-01-02 | NaN |
| 1003 | C003 | NaN | 2024-01-03 | ZT456 |
| 1004 | NaN | NaN | NaN | NaN |
| 1005 | C005 | 1200.0 | 2024-01-05 | NaN |
需求:Excel 数据中,只要 “订单号、客户 ID、销售额” 等任意一列有缺失,就删除该行(确保每行数据完整)。
代码:
import pandas as pd
# 1. 导入Excel数据(指定sheet,读取.xlsx需用engine='openpyxl')
df = pd.read_excel("sales_data.xlsx", sheet_name="Sheet1", engine="openpyxl")
# 2. 查看导入后的缺失值情况
print("导入后的数据缺失值统计:")
print(df.isnull().sum()) # 输出每列缺失值数量:客户ID=2,销售额=1,物流单号=3,订单日期=1
# 3. 用dropna默认参数删除含缺失值的行(axis=0, how='any')
df_clean1 = df.dropna()
# 4. 查看清洗后的数据
print("n删除任何一列有缺失的行后:")
print(df_clean1)
# 结果:仅保留1001行(无任何缺失值),其他4行因含缺失值被删除
需求:Excel 数据中,仅当某行所有列(如 1004 行 “订单号、客户 ID” 全为NaN)都缺失时才删除,部分缺失的行(如 1002 行 “客户 ID、物流单号” 缺失)保留。
代码:
# 用how='all'删除全缺失的行
df_clean2 = df.dropna(how="all")
print("仅删除全缺失的行后:")
print(df_clean2)
# 结果:删除1004行(全缺失),保留1001、1002、1003、1005行(部分缺失)
需求:Excel 数据中,仅关注 “订单号、销售额、订单日期”3 个核心列 —— 只要这 3 列有一个缺失,就删除该行;其他列(如 “物流单号”)缺失不影响。
代码:
# 用subset指定核心列,仅判断这些列的缺失值
df_clean3 = df.dropna(subset=["订单号", "销售额", "订单日期"])
print("仅删除核心列(订单号、销售额、订单日期)有缺失的行后:")
print(df_clean3)
# 结果:删除1003行(销售额缺失)、1004行(核心列全缺失),保留1001、1002、1005行
# (1002行“客户ID、物流单号”缺失,但核心列完整,故保留)
需求:Excel 数据中,只要某行有至少 3 个列无缺失值,就保留;不足 3 个则删除(适用于 “部分字段缺失但仍有分析价值” 的场景)。
代码:
# 用thresh=3保留至少3个非缺失值的行
df_clean4 = df.dropna(thresh=3)
print("保留至少3个非缺失值的行后:")
print(df_clean4)
# 结果:
# 1001行(5个非缺失值)→ 保留;1002行(3个非缺失值)→ 保留;
# 1003行(3个非缺失值)→ 保留;1004行(0个)→ 删除;1005行(4个)→ 保留
需求:若 Excel 导入的数据中,某列(如 “备用字段”)所有值都是NaN,无任何分析价值,用dropna删除该列。
代码:
# 先模拟一列全缺失的情况(在原df中添加“备用字段”列)
df["备用字段"] = pd.NA # 新增列全为缺失值
# 用axis=1删除全缺失的列(how='all')
df_clean5 = df.dropna(axis=1, how="all")
print("删除全缺失的列后,剩余列名:")
print(df_clean5.columns.tolist())
# 结果:删除“备用字段”列,保留“订单号、客户ID、销售额、订单日期、物流单号”5列
dropna虽操作简单,但误用可能导致有用数据丢失或分析偏差,需注意以下细节:
删除前务必用df.isnull().sum()或df.isnull().mean()查看缺失值占比:
若某列缺失值占比 > 50%(如 “物流单号” 缺失 70%),删除该列更合理(避免删除大量行);
若某行缺失值仅 1 个且为非核心列(如 “备注”),优先保留该行(用fillna填充,而非dropna删除)。
dropna默认返回新的 DataFrame,不修改原始数据,需将结果赋值给变量(如df_clean = df.dropna());若想直接修改原数据,可加inplace=True参数:
df.dropna(inplace=True) # 直接在原df上删除缺失行,无需赋值
Excel 中的 “空白单元格” 导入后会成为NaN,但 “文本型无效值”(如 “无数据”“待补充”)需先转化为NaN,dropna才能识别:
# 先将Excel中的“无数据”“待补充”转化为NaN,再用dropna删除
df = pd.read_excel("sales_data.xlsx")
df = df.replace(["无数据", "待补充"], pd.NA) # 替换无效文本为NaN
df_clean = df.dropna()
dropna(axis=1)删除列时需格外小心 —— 即使某列当前缺失值多,但后续可能通过其他表补充(如 “物流单号” 可从物流系统补录),建议先备份原始数据,再删除列:
# 备份原始数据,再删除列
df_backup = df.copy() # 备份
df_clean = df_backup.dropna(axis=1, how="all") # 删除全缺失列
dropna的核心价值是 “快速剔除无效数据”,但并非所有缺失值场景都适用,需结合 Excel 数据的实际情况选择:
处理 Excel 导入数据时,建议遵循 “查→判→删 / 填” 的流程:
通过合理使用dropna,能有效净化 Excel 导入的数据,为后续的统计分析、可视化、建模打下坚实基础 —— 这也是数据处理中 “去伪存真” 的关键一步。

数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 四层结构 · 零件与房子 · 六大易错点 一、什么是指标体系 定义:指标体系是整套完整框架 ...
2026-10-13写在开头 先还原一个你大概率见过的场面。 立项会上有人说:我们得做用户画像。 于是团队关进会议室,白板写满便利贴,两小时后 ...
2026-10-13 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-10-13在统计学与数据分析研究中,相关性分析分为数值变量分析与分类变量分析两大类。针对身高、销量、分数等连续数值变量,通常采用皮 ...
2026-10-12在Power BI可视化分析体系中,常规表格仅能展示枯燥的数值数据,存在数据对比不直观、强弱规律不突出、维度交叉分析低效等问题。 ...
2026-10-12 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-10-12在传统零售行业同质化竞争激烈、大众营销转化率持续走低的背景下,依托经验与直觉的粗放式营销逐渐失效。美国塔吉特百货(Target ...
2026-10-10随着智能客服、数字化服务、用户精细化运营的快速普及,传统零散、非标准化的客户服务数据与业务体系逐渐难以支撑高效服务治理。 ...
2026-10-10 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-10-10CDA数据分析师 出品 作者:李诗怡 定义区别 · 场景举例 · 指标分类 · 计算方法 知识体系总览 模块 包含内容 一、核 ...
2026-10-09在数据分析工作流中,业务数据大多存储在各类关系型数据库内,例如MySQL、PostgreSQL、SQLite等。Pandas是Python生态中主流的数 ...
2026-10-09在数字化精细化运营时代,海量用户存在需求差异、行为差异、价值差异与偏好差异。如果企业采用“一刀切”的统一营销、统一服务、 ...
2026-10-09 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-10-09指标体系是企业数字化分析、业务监控、经营决策的核心基础框架,是将零散数据转化为可衡量、可对比、可落地业务价值的关键体系。 ...
2026-10-08随着市场竞争日趋饱和,同质化低价竞争逐渐陷入内卷僵局,传统以价格、渠道、促销为核心的营销模式边际效益持续递减。在此背景下 ...
2026-10-08 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-10-08你有没有想过,手机里点外卖、刷社交软件、转一笔账,背后到底是谁在替你"记着账"? 答案其实很简单:数据库,以及跟它对话的那 ...
2026-10-07CDA数据分析师 出品 作者:李诗怡 一、数据分析四大思维 1. 对比思维:没有对比就没有分析 核心观点:单独一个数字没有意义,有 ...
2026-10-05Kimball 是方法,星型模型是它产出的形状。 很多人把"Kimball vs 星型模型"当成一道选择题——这本身就是个误会:Kimball 是动词 ...
2026-10-05写在开头 老板在微信上甩来一句: "帮我看下为什么销量跌了。" ” 你回工位,打开 SQL,开始写。查订单表、拉近三个月、按 ...
2026-10-03