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

TypeError: NoneType不可下标化:删除高缺失值列报错排查

解决Pandas删除高缺失值列的TypeError问题

错误原因

你的代码报错是因为使用inplace=True时,DataFrame.drop()会直接修改原DataFrame并返回None,而你将这个返回值重新赋值给了Leads。第一次删除列后,Leads变成None,后续循环访问Leads[i]自然会触发TypeError: 'NoneType' object is not subscriptable。

修复方案

方案1:修正循环内的删除逻辑

保留inplace=True但不要赋值,同时遍历复制后的列名列表(避免循环中列数变化引发的异常):

for i in Leads.columns.copy():
    if (Leads[i].isnull().sum() / Leads.shape[0]) > 0.40:
        Leads.drop(i, axis=1, inplace=True)

方案2:更高效的Pandas向量化写法(推荐)

避免循环,直接计算所有列的缺失率,一次性筛选并删除目标列,性能更优:

# 计算每列缺失值占比
missing_ratios = Leads.isnull().sum() / len(Leads)
# 筛选出缺失率超过40%的列名
cols_to_drop = missing_ratios[missing_ratios > 0.4].index
# 删除列(二选一:赋值给新变量或直接修改原DataFrame)
Leads = Leads.drop(cols_to_drop, axis=1)
# 或者用inplace直接修改原数据
# Leads.drop(cols_to_drop, axis=1, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:00:55