You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas移除缺失值占比超10%列报错求助(IndexingError)

解决Pandas移除高缺失率列的索引错误问题

看起来你已经正确计算了各列的缺失值占比,但遇到了索引使用的问题——这很常见,尤其是刚接触Pandas Series和DataFrame索引的时候。让我一步步帮你解决:

问题原因分析

你计算出来的result是一个Pandas Series对象(一维结构),而不是DataFrame。从你的输出也能看出来,它只有列名作为索引,对应的缺失率是值。当你用result.iloc[:,0]时,你试图用二维索引(行+列)去访问一维的Series,这就触发了IndexingError: Too many indexers

正确的实现步骤

1. 确认缺失率计算(你的这部分是对的)

先把你的原始代码和输出放出来,方便对照:

df_missing = df.isna()
result = df_missing.sum() / len(df)

输出:

Default          0.010066
Income           0.142857
Age              0.109090
Name             0.047000
Gender           0.000000
Type of job      0.200000
Amt of credit    0.850090
Years employed   0.009003
dtype: float64

2. 筛选符合条件的列

我们需要从result中找出缺失率≤10%(即≤0.1)的列名,然后用这些列名去切片原始DataFrame:

# 筛选缺失率≤0.1的列名
keep_columns = result[result <= 0.1].index

# 保留这些列到新的DataFrame
filtered_df = df[keep_columns]

3. 验证结果

运行上面的代码后,filtered_df就会只保留DefaultNameGenderYears employed这几列,完全符合你的预期。

额外小技巧

你也可以把整个过程简化成一行代码,更简洁:

filtered_df = df.loc[:, (df.isna().sum() / len(df)) <= 0.1]

这里用df.loc[:, 布尔条件]直接在原DataFrame上筛选列,省去了中间变量result,适合追求代码简洁的场景。

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

火山引擎 最新活动