登录
首页 >  文章 >  python教程

Python 3中如何过滤掉全为空值的列_通过dropna设置how为all

时间:2026-05-05 09:12:45 469浏览 收藏

从现在开始,努力学习吧!本文《Python 3中如何过滤掉全为空值的列_通过dropna设置how为all》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

df.dropna(how='all', axis=1)可删除全为空值(NaN/None)的列,但空字符串需先用replace转为NaN;thresh参数更灵活,如thresh=5保留非空值≥5行的列。

Python 3中如何过滤掉全为空值的列_通过dropna设置how为all

dropna(how='all') 是最直接的解法,但必须配合 axis=1

很多人试了 dropna(how='all') 发现没效果,根本原因是默认只处理行(axis=0)。要删全为空的列,必须显式指定 axis=1

  • df.dropna(how='all', axis=1) —— 正确:丢弃所有值都为 NaNNone 或空字符串(注意:空字符串不算空值!)的列
  • df.dropna(how='all') —— 错误:实际等价于 df.dropna(how='all', axis=0),删的是全空的行

另外注意:how='all' 只认真正的缺失值(NaNNone),不把 ''0False 当空值。如果列里混着空字符串,得先清洗。

空字符串也算“空”?得先用 replace + np.nan 预处理

现实数据里常有 ''' ''N/A' 这类伪空值,dropna 完全无视它们。需要提前统一转成 NaN

import numpy as np
df = df.replace(['', ' ', 'N/A', 'NULL'], np.nan)
df = df.dropna(how='all', axis=1)

注意顺序:必须先 replacedropna;如果列含数字类型,replace 会自动跳过非字符串值,安全。

想保留至少一个非空值的列?用 thresh 参数更灵活

how='all' 是二元判断(全空才删),但有时你需要“至少保留 2 个有效值”的列,这时 thresh 更合适:

  • df.dropna(axis=1, thresh=1) → 等价于 how='all'(每列至少 1 个非空才保留)
  • df.dropna(axis=1, thresh=5) → 只保留非空值 ≥ 5 行的列

threshhow 更可控,尤其在样本量不固定时,避免因某列刚好少一个值就被误删。

删完列后索引没变?别忘了 reset_index 可能不是必须的

dropna 不影响原 DataFrame 的索引,列删掉后列名自然消失,不需要 reset_index(那是重置行索引用的)。唯一要注意的是:

  • 如果用了 inplace=True,返回值是 None,别链式调用
  • 删列后若要做 df.columns.tolist(),结果就是剩余列名,无需额外处理
  • 如果列名含重复项,dropna 仍会按位置删列,不会报错但可能不符合预期——建议先检查 df.columns.duplicated().any()

真正容易被忽略的是混合数据类型列里的隐式空值:比如一列是字符串和 NaN 混合,Pandas 会转成 object 类型,dropna 仍能识别 NaN;但如果存了字符串 'nan',它就永远删不掉——得靠 replace 先清理。

本篇关于《Python 3中如何过滤掉全为空值的列_通过dropna设置how为all》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>