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

Pandas DataFrame如何删除值全为字符串'nan'的列和行

全字符串'nan'列/行删除方案

核心问题原因

  • 执行df = df.applymap(str)后,pandas原生缺失值NaN被转换为字符串类型的'nan',不属于dropna方法默认识别的空值范畴,因此原生删除空值的方法失效
  • 原循环代码失效有两个原因:一是遍历过程中动态删除列会导致列的位置索引偏移,出现漏判;二是drop方法的columns参数需要传入列名,原代码传入的是列的位置序号,参数不匹配导致删除操作未生效

推荐实现代码(向量化操作,效率更高)

删除所有值全为字符串'nan'的列

df = df.loc[:, ~(df == 'nan').all(axis=0)]

删除所有值全为字符串'nan'的行

df = df.loc[~(df == 'nan').all(axis=1), :]

如果你的数据中可能存在大小写不一致的'Nan'/'NAN'等情况,可以调整判断逻辑兼容:

# 大小写不敏感的判断,适配各种写法的nan字符串
df = df.loc[:, ~df.apply(lambda x: x.str.lower()).eq('nan').all(axis=0)]
df = df.loc[~df.apply(lambda x: x.str.lower()).eq('nan').all(axis=1), :]

可运行的循环版实现(仅作逻辑参考,优先使用向量化方案)

提前将列名存入独立列表避免索引偏移,直接基于列名判断删除:

for col in df.columns.tolist():
    if (df[col] == 'nan').all():
        df.drop(columns=col, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:51:04