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

报错TypeError:不支持集合作为索引器,请求解决及原因排查

解决从GCP Bucket读取Pickle文件后划分训练测试集的TypeError问题

解决方案

直接将列选择时的集合(set)转换为列表(list),或者用列表推导式筛选列,避免使用集合作为pandas的列索引器。

方式1:集合转列表(会打乱列顺序)

修改train_test_split的第一个参数:

X_train, X_test, y_train, y_test = train_test_split(
    df[list(set(df.columns) - set(['load_date','target']))],
    df['target'],
    test_size=0.2,
    shuffle=True,
    random_state=21,
    stratify=df[['load_date','target']]
)

方式2:列表推导式(保留原始列顺序,推荐)

这种方式更稳妥,还能保持列的原有排列:

X_train, X_test, y_train, y_test = train_test_split(
    df[[col for col in df.columns if col not in ['load_date','target']]],
    df['target'],
    test_size=0.2,
    shuffle=True,
    random_state=21,
    stratify=df[['load_date','target']]
)

原因排查

  1. 直接报错原因:pandas从1.5.0版本开始,严格禁止使用集合(set)作为DataFrame的列索引器,要求必须使用列表(list)、元组(tuple)等有序序列,否则触发TypeError。
  2. 本地可运行的原因:你本地环境的pandas版本较低,尚未启用该严格检查,允许使用集合作为索引器;而GCP环境的pandas版本更高,执行了该规则,因此出现报错。
  3. 和读取方式无关:报错和从本地/GCP Bucket读取文件的方式没有关系,本质是不同环境的pandas版本差异导致的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:27:40