python dropna怎么用

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

直接用 dropna() 就能删掉含缺失值的行,但想删得准、不误伤,得看清楚几个关键参数怎么配。

默认行为:删掉任何含 NaN 的整行

不加参数时,df.dropna() 等价于 df.dropna(axis=0, how='any'),意思是:只要某一行里有一个 NaNNonepd.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 设最低保留门槛——后者优先级更高:

  • 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 完全一致
  • 对时间序列或关键字段做兜底清洗很实用