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

