首先,我刚开始使用Python,因此我并不了解。我试图搜索此问题,但找不到合适的解决方案。
请简单介绍一下:我正在研究一个交通事故数据库,该数据库具有近165000行和39列。我正在采取的步骤之一是在此基础上运行apriori算法(来自apyori实验室)。 如果需要,可以donwnload the base (.csv) here。
但是,要做到这一点,我必须将熊猫数据库转换为列表,这是我遇到问题的部分。
我正在使用以下代码:
def list_apriori(df):
apr = []
for i in range (0, 164699):
apr.append([str(df.values[i,j]) for j in range (0,38)])
return apr
我让这段代码运行了将近40分钟,但没有完成,所以我认为也许有一种改进的方法。 我用以下方法进行了测试:
def list_apriori(df):
apr = []
for i in range (0, 50):
apr.append([str(df.values[i,j]) for j in range (0,10)])
return apr
它在不到5分钟的时间内完成(我相信这是很长的时间,因为它只运行在51行和11列中)。 我也尝试过更换计算机,但没有任何区别。
对于是否以及如何改进代码以使其更快地运行,您有何建议? 预先感谢。
编辑 我认为问题在于转换为字符串。感谢@ninesalt的帮助! 起作用的代码如下:
def list_apriori(df):
result = df.astype(str)
apr = []
for i in range (0, 164699):
apr.append([df.values[i,j] for j in range (0,38)])
return apr
答案 0 :(得分:0)
这正是您想要的,但没有循环。这在我的PC上需要3秒钟,并且数据帧的大小与示例(165000, 39)
import numpy as np
import pandas as pd
arr = np.random.randint(0, 100, (165000, 39))
df = pd.DataFrame(arr)
result = df.astype(str)
firstrow = result.iloc[[0]]
print(firstrow) # prints first row as a string
每当您认为某项操作昂贵时,几乎总是有一种更轻松,更高效的方法来处理所使用的库,您只需检查文档即可。