关联规则结果输出格式调整及pandas处理代码逻辑详解
问题原因说明
你当前遇到的重复输出问题,核心原因是DataFrame创建和打印代码被放在了for循环内部,每处理1条关联规则就会生成并打印一次当前累加的DataFrame,最终出现多次重复输出的情况。
原代码逻辑详解
现有代码的运行逻辑拆分如下:
- 初始化空列表
results,用于存储所有关联规则的格式化数据 - 遍历关联规则挖掘的输出结果
association_results,对每条规则做如下处理:- 取出规则对应的商品组合,拆分得到前件、后件两个商品,存入
value0、value1 - 取出该规则的支持度(Support),截取前7位字符串存入
value2 - 取出该规则的置信度(Confidence),截取前7位字符串存入
value3 - 取出该规则的提升度(Lift),截取前7位字符串存入
value4 - 将上述5个值拼接为元组,追加到
results列表中
- 取出规则对应的商品组合,拆分得到前件、后件两个商品,存入
- 错误逻辑:表头定义、DataFrame生成、打印操作被放在了for循环内部,每处理完1条规则就执行一次,导致重复输出。
调整后的正确代码
只需将DataFrame生成和打印的逻辑移动到for循环外部即可,修改后代码如下:
import pandas as pd results=[] for item in association_results: pair = item[0] items = [x for x in pair] value0 = str(items[0]) value1 = str(items[1]) value2 = str(item[1])[:7] value3 = str(item[2][0][2])[:7] value4 = str(item[2][0][3])[:7] rows = (value0,value1,value2,value3,value4) results.append(rows) # 以下逻辑移到循环外部 Labels =['Title1','Title2','Support','Confidence','Lift'] store_suggestion = pd.DataFrame.from_records(results,columns=Labels) print(store_suggestion)
可选优化建议
如果需要更规范的数值格式控制,不需要提前把支持度、置信度、提升度转成字符串截取,可以直接通过pandas全局设置控制小数显示位数,示例如下:
pd.set_option('display.float_format', lambda x: '{:.5f}'.format(x))
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

