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

基于特定列属性删行:移除Closed Date列含NaN行后仍存在NaN的问题

为什么删除Closed Date列NaN行后仍有残留?

嘿,这种情况我碰到过好多次,大概率是下面几个原因之一,咱们一个个排查:

  • 数据里的“NaN”不是真正的NaN
    很多时候数据集里的缺失值是字符串形式的,比如写的是"NaN"、"nan"甚至"N/A",而不是Python里标准的np.nan或者pandas的pd.NA。这时候dropna根本识别不出来这些“假NaN”。
    你可以先跑一行代码检查:

    print(df['Closed Date'].unique())
    

    如果看到字符串类型的缺失值,先把它们转换成标准NaN再删行:

    import numpy as np
    df['Closed Date'] = df['Closed Date'].replace(['NaN', 'nan', 'N/A'], np.nan)
    df = df.dropna(subset=['Closed Date'])
    
  • 忘记把操作结果赋值回去
    pandas的dropna默认是返回一个新的DataFrame副本,不会直接修改原数据。如果你只写了df.dropna(subset=['Closed Date'])而没把结果存回df,原数据当然纹丝不动。
    正确的写法是:

    df = df.dropna(subset=['Closed Date'])
    

    (不推荐用inplace=True,因为它会修改原数据,调试起来更麻烦)

  • 列名拼写不对
    别笑,这真的是高频坑!比如列名其实是"ClosedDate"(没空格)、" Closed Date "(前后带空格)或者"closed date"(大小写不一样),你用'Closed Date'去匹配自然找不到对应的列,dropna等于没执行。
    先确认列名:

    print(df.columns.tolist())
    

    找到完全匹配的列名再用。

  • 存在其他类型的空值
    除了NaN,还有None、空字符串""、甚至一些奇怪的空白字符(比如全角空格),这些都不会被dropna当成缺失值处理。你可以分别统计:

    print("真正的NaN数量:", df['Closed Date'].isna().sum())
    print("空字符串数量:", df['Closed Date'].eq('').sum())
    

    如果是空字符串,得先把它们转成NaN再删:

    df['Closed Date'] = df['Closed Date'].replace('', np.nan)
    df = df.dropna(subset=['Closed Date'])
    

先试试上面的方法,应该能解决你的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:51