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



首先,我刚开始使用Python,因此我没有太多知识。我试图搜索这个问题,但找不到合适的解决方案。

简单来说:我正在研究一个交通事故数据库,该数据库有近 165000 行和 39 列。我正在采取的步骤之一是在此基础上运行先验算法(来自apyori实验室(。 如果需要,可以在此处加载底座(.csv(。

但是,为了做到这一点,我必须将我的熊猫数据库转换为列表,这是我遇到问题的部分。

我正在使用以下代码:

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

这正是您想要的,但没有循环。这在我的电脑上需要 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

每当您遇到您认为昂贵的操作时,几乎总有一种更简单、更有效的方法可以使用您正在使用的库来完成它,您只需检查文档即可。

最新更新