如何处理SQL交易数据以适配mlxtend的TransactionEncoder工具
问题解决方法
核心报错原因
TransactionEncoder要求的输入格式为嵌套列表结构,每一个子列表对应一笔交易的全部商品(和你测试用的dataset2格式完全一致)。你当前代码的问题出在拆分商品列时加了expand=True参数,得到的是多列宽表DataFrame,格式完全不匹配,遍历过程中会读取到整数型的列索引,最终抛出'int' object is not iterable报错。
具体修改方案
只需要调整商品列拆分的逻辑,不需要扩展为多列,直接生成每行对应一个商品列表的结构,同时过滤空值避免异常即可。
修改后的代码片段
将你原有代码中拆分商品列的部分替换为以下内容:
# 拆分逗号分隔的商品字符串,expand=False直接返回每行对应一个商品列表的Series df4 = d["COMBO_VARIABLE_AGG"].str.split(", ", n=-1, expand=False) # 过滤空值行,再转为嵌套列表格式,完全匹配TransactionEncoder的输入要求 dataset = df4.dropna().tolist()
修改后你可以先打印前3条数据验证格式:
print(dataset[:3])
输出格式应该和你测试用的dataset2完全一致,后续TransactionEncoder相关逻辑就可以正常运行。
内容的提问来源于stack exchange,提问作者user2790744
相关产品推荐
相关产品推荐

