append()函数需要很长时间才能运行

时间:2018-10-18 21:07:04

标签: python python-3.x

首先,我刚开始使用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

1 个答案:

答案 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

每当您认为某项操作昂贵时,几乎总是有一种更轻松,更高效的方法来处理所使用的库,您只需检查文档即可。