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

为何含Nan值的DataFrame调用df.dropna()无法删除缺失值行?

df.dropna()无法删除含缺失值行的原因及解决办法

为什么删不掉?

pandas的dropna()只识别标准缺失值:np.nan、pd.NA或Python原生的None。你示例行里的Nan是大写首字母的字符串"Nan",属于普通文本内容,pandas不会将其判定为缺失值,因此dropna()不会对这些行进行处理。

解决步骤

1. 先确认数据中的"假缺失值"

先验证这些Nan的实际类型和分布:

# 查看目标列的所有唯一值,确认是否存在字符串"Nan"
print(df['目标列名'].unique())
# 统计整个DataFrame中"Nan"的出现次数
print(df.apply(lambda col: col == 'Nan').sum())

2. 将字符串"Nan"转换为标准缺失值

有两种高效处理方式:

方式一:读取CSV时直接指定缺失值标记

在读取数据阶段就把"Nan"转换成np.nan:

df = pd.read_csv('/Users/xxx/Desktop/CS 677/Homework_4/FashionDataset.csv', na_values=['Nan'])

na_values支持同时指定多种缺失值形式,比如na_values=['Nan', 'NA', 'null', ''],可一次性处理所有非标准缺失值。

方式二:读取后批量替换

如果已完成数据读取,直接全局替换:

import numpy as np
# 将所有"Nan"字符串替换为标准缺失值np.nan
df = df.replace('Nan', np.nan)
# 执行缺失值行删除
df = df.dropna()

⚠️ 注意:dropna()默认返回新的DataFrame,若想直接修改原数据,需添加参数inplace=True:df.dropna(inplace=True)

3. 验证处理效果

确认缺失值已被正确识别并删除:

# 查看每列的缺失值剩余数量
print(df.isna().sum())
# 对比处理前后的行数变化
print(len(df))

额外实用技巧

  • 若只需删除全为缺失值的行,使用df.dropna(how='all')
  • 若只需删除指定列存在缺失值的行,使用df.dropna(subset=['列名1', '列名2'])

内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:20:28