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

使用Pandas调用ECLAT算法时出现KeyError 0的原因及解决方案

ECLAT实例创建时KeyError 0的原因及解决方案

可能原因

  • pyECLAT要求输入数据必须是事务-项矩阵,所有列都代表待挖掘的项,不能包含Transaction_ID这类事务标识列。你的数据第一列是Transaction_ID,库会错误地将其当作项处理,导致内部列名/索引匹配逻辑出错。
  • 列名类型不统一:部分列名为整数(如0、1),部分为字符串,库在遍历列时混淆了列名和列索引,尝试访问不存在的列名0。
  • 索引设置异常:若Transaction_ID被误设为DataFrame的索引,库在处理时可能将索引当作列访问,引发KeyError。

解决方案

  • 移除事务标识列:创建ECLAT实例前,先剔除Transaction_ID列,保留仅包含项的数据集:
    from pyECLAT import ECLAT
    # 移除Transaction_ID列,提取事务-项矩阵
    df_items = df_uci.drop(columns=['Transaction_ID'])
    # 创建ECLAT实例
    my_eclat = ECLAT(data=df_items)
    
  • 统一列名类型:检查所有列名,确保类型一致(全字符串或全整数),例如将整数列名转为字符串:
    df_uci.columns = df_uci.columns.astype(str)
    
  • 检查并重置索引:确认Transaction_ID是普通列而非索引,若已设为索引,先重置:
    # 若Transaction_ID是索引,重置为普通列
    if 'Transaction_ID' not in df_uci.columns:
        df_uci = df_uci.reset_index(names=['Transaction_ID'])
    # 移除标识列后创建实例
    df_items = df_uci.drop(columns=['Transaction_ID'])
    my_eclat = ECLAT(data=df_items)
    
  • 验证数据格式:确保项列的取值为布尔值(True/False)或0/1(表示事务是否包含该项)。若数据是原始商品名称格式,需先转换为事务-项矩阵(可使用pd.get_dummies实现)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:23:36