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

如何解决根据索引列表选取DataFrame列时的索引不存在报错?

解决“none of them are in the index”报错的方案

嘿,这个报错我之前也碰到过,主要是索引的使用逻辑出了问题,咱们一步步梳理解决:

1. 先修正变量名的笔误

你定义的索引变量是indices = full_train_df.query("primary == primary").index,但后面代码里用的是clean_df_indices——变量名不统一,先把这个小问题改了,比如统一用indices。

2. 核心解决方法:别用切片,改用.loc按索引取值

你写的[:indices]是按整数位置切片,但indices是从DataFrame里拿到的索引值(可能不是连续整数,或者和train_df的索引范围不匹配),这就导致系统找不到对应位置,报错“无对应索引”。

正确的做法是用.loc来精准匹配索引,代码改成这样:

# 按索引选取指定行的A、B列
X = train_df.loc[indices, ["A", "B"]].values
# 按索引选取指定行的year列
y = train_df.loc[indices, "year"].values

.loc是专门用来按索引标签取值的,完美适配你拿到的索引列表。

3. 检查两个DataFrame的索引是否匹配

如果改了.loc还是报错,那大概率是full_train_df和train_df的索引不匹配——比如一个是重置过的连续整数索引,另一个是原始的非连续索引,或者两个表的行对应关系不对。

这时候可以先验证一下:

# 检查两个DataFrame的索引是否完全一致
print(full_train_df.index.equals(train_df.index))

如果输出是False,那你要么调整两个表的索引让它们对齐,要么直接从train_df本身筛选索引(如果业务逻辑允许的话):

# 直接从train_df里获取符合条件的索引
indices = train_df[train_df["primary"].notna()].index

4. 小优化:简化索引筛选逻辑

你写的query("primary == primary")其实是筛选primary列非空的行,可以简化成更高效的写法:

indices = full_train_df[full_train_df["primary"].notna()].index

最后,整合后的正确代码大概是这样:

# 获取符合条件的索引(确保和train_df索引匹配)
indices = full_train_df[full_train_df["primary"].notna()].index
# 按索引选取数据
X = train_df.loc[indices, ["A", "B"]].values
y = train_df.loc[indices, "year"].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:30:11