You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用Pandas的dropna()函数无法删除NaN值?

问题:调用df.dropna(axis=1,inplace=True)无法删除DataFrame中的NaN值

问题描述

通过字典创建Pandas DataFrame后,执行以下代码尝试删除含NaN值的列,但NaN仍未被移除:

df=pd.DataFrame(dic)
df.dropna(axis=1,inplace=True)
df.head()

从输出可见,DataFrame中仍存在包含NaN值的列(例如stalk-root列)。


原因分析

dropna()方法默认参数为how='all',当指定axis=1时,只有整列所有值都是NaN的列才会被删除。而你的DataFrame中,那些包含NaN的列同时存在非NaN值,所以默认逻辑不会对这些列进行删除操作。

解决方法

根据需求选择以下修改方式:

  1. 删除任何包含NaN值的列
    修改dropna的how参数为'any',只要列中有至少一个NaN就删除:

    df=pd.DataFrame(dic)
    # 包含任何NaN的列都删除
    df.dropna(axis=1, how='any', inplace=True)
    df.head()
    
  2. 保留至少有N个非NaN值的列
    若要灵活控制,使用thresh参数指定列中非NaN值的最小数量,例如保留至少有100个非NaN值的列:

    df=pd.DataFrame(dic)
    # 仅保留非NaN值数量≥100的列
    df.dropna(axis=1, thresh=100, inplace=True)
    df.head()
    
  3. 先查看各列缺失值情况
    可先执行以下代码统计每列的NaN数量,清晰了解数据缺失情况:

    print(df.isna().sum())
    

内容的提问来源于stack exchange,提问作者Dharm paaji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:45:47