在学习《python数据分析与挖掘实战》第八章时,运行Apriori报错,源代码如下:
#-*- coding: utf-8 -*- from __future__ import print_function import pandas as pd from apriori import * #导入自行编写的apriori函数 import time #导入时间库用来计算用时 inputfile = r'...\chapter8\demo\data\apriori.txt' #输入事务集文件 data = pd.read_csv(inputfile, header=None, dtype = object) start = time.clock() #计时开始 print(u'\n转换原始数据至0-1矩阵...') ct = lambda x: pd.Series(1, index=x[pd.notnull(x)]) #转换0-1矩阵的过渡函数 b = map(ct, data.as_matrix()) #用map方式执行 data = pd.DataFrame(b).fillna(0) #实现矩阵转换,空值用0填充 end = time.clock() #计时结束 print(u'\n转换完毕,用时:%0.2f秒' %(end-start)) del b #删除中间变量b,节省内存 support = 0.06 #最小支持度 confidence = 0.75 #最小置信度 ms = '---' #连接符,默认'--',用来区分不同元素,如A--B。需要保证原始表格中不含有该字符 start = time.clock() #计时开始 print(u'\n开始搜索关联规则...') find_rule(data, support, confidence, ms) end = time.clock() #计时结束 print(u'\n搜索完成,用时:%0.2f秒' %(end-start))运行后报错:TypeError: data argument can't be an iterator
在网上查后,发现Dataframe参数不能是迭代器,在本例中,b是一个map迭代器,故出错
将b进行转化,加入代码:c=list(b),并将参数c传入DataFrame中即可。代码可正常运行!