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

如何删除Pandas DataFrame指定列中含NaN值的行?

问题根因
  • 集合输出出现重复nan是正常特性,不是异常:pandas 中默认的缺失值为 NumPy 实现的np.nan,该值的等值判断逻辑为np.nan != np.nan,而Python的set是通过对象等值性判断元素是否重复,因此每个nan都会被识别为独立元素,无法被set自动去重。
  • 列赋值后缺失值没被删掉是索引对齐机制导致的:df['col1'].dropna()返回的是剔除缺失值后的Series,保留的是非空行的原始索引,将这个Series赋值回原DataFrame的col1列时,pandas会按照索引逐行匹配,原缺失值所在的行因为在drop后的结果里没有对应索引的取值,会被自动填充为nan,相当于操作无效。
正确操作方法

根据实际需求选对应方案即可:

  1. 需要删除col1列存在缺失值的整行数据(最常用场景):
    调用dropna时指定subset参数,明确要判断缺失值的列,不要单独对列做dropna再赋值:
    # 方案1:dropna指定子集
    df = df.dropna(subset=['col1'])
    
    # 方案2:布尔索引过滤,效果完全一致
    df = df[df['col1'].notna()]
    
  2. 仅需要获取col1列无缺失值的序列,不改动原DataFrame的结构:
    不要将dropna的结果赋值回原df的列,直接用变量接收返回值即可:
    col1_without_null = df['col1'].dropna()
    
补充提示

如果需要查看列的真实唯一值,不要用原生set(),使用pandas内置的接口即可正确识别nan、完成去重:

# 查看col1的所有唯一值,nan只会出现一次
print(df['col1'].unique())

# 统计col1每个取值的出现次数,包含nan的计数
print(df['col1'].value_counts(dropna=False))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:01:04