dropna()默认删除含任意NaN的整行;axis控制方向(0删行、1删列);how设条件(any/any)、thresh设非空下限;subset限定检查列。

直接用 dropna() 就能删掉含缺失值的行,但想删得准、不误伤,得看清楚几个关键参数怎么配。
默认行为:删掉任何含 NaN 的整行
不加参数时,df.dropna() 等价于 df.dropna(axis=0, how='any'),意思是:只要某一行里有一个 NaN、None 或 pd.NaT,整行就扔掉。
- 适合快速清理少量零散缺失的场景
- 注意:原数据不变,返回新 DataFrame;要改原表得加
inplace=True
删列 or 删行?用 axis 控制方向
axis=0(默认)按行操作,axis=1 按列操作:
-
df.dropna(axis=0):删掉含缺失值的行(常用) -
df.dropna(axis=1):删掉含缺失值的列(谨慎!可能直接丢掉一个特征) - 也可写成
axis='index'或axis='columns',语义更清晰
删得“松”还是“严”?how 和 thresh 配合用
how 决定触发条件,thresh 设最低保留门槛——后者优先级更高:
立即学习“Python免费学习笔记(深入)”;
-
how='any'(默认):一个缺失就删 -
how='all':整行/列全空才删(常用于过滤全 NaN 列) -
thresh=3:保留至少有 3 个非空值的行(比how更灵活) - 比如
dropna(thresh=5)在 6 列数据中,相当于“最多允许 1 个缺失”
只盯特定几列?用 subset 精准定位
不想全表扫,只关心某些列有没有缺失,就用 subset:
-
df.dropna(subset=['age', 'income']):只要 age 或 income 是 NaN,对应行就删 -
subset接的是列名列表,字符串必须和 df.columns 完全一致 - 对时间序列或关键字段做兜底清洗很实用











