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
相关产品推荐
相关产品推荐

