我正在创建一个包含27k行、8列文本和30列浮动的熊猫数据帧。从googlebigquery中提取数据并创建DataFrame和其他格式化变量大约需要5分钟。不过,一旦我开始写作,我就会碰到一堵砖墙。将这些数据写入工作表平均需要6个多小时。它大约每秒写1.2行。我制作的其他excel模板至少需要70倍的时间,每秒可以写70-250多行。我不明白为什么要花这么长时间。有什么我可以做得更有效的吗?你知道吗
我试过使用Pandas' integration with xlsxwriter,但我不知道如何使用单元格级格式。我发现的一切似乎都表明它不支持这一点。当我使用它时,查询、创建和编写需要8分钟。添加单元格级格式怎么会花费这么多时间?你知道吗
我还尝试在创建工作簿时添加'constant_memory':True
选项。我不知道还有什么可以尝试的。我查看了正在访问的数据的大小,dataframe的大小是24mb,format变量的大小是0.6。你知道吗
我的写作功能的一个最简单的例子是:
num_rows, num_cols = main_df.shape
for r in tqdm(xrange(num_rows), desc = 'Writing Rows'):
for c in xrange(num_cols):
worksheet.write(r, c, main_df.iloc[r, c], excel_format_data[r][c])
我知道tqdm会增加开销,但我将其用于我所讨论的其他文件,使用相同的代码,它们的速度要快得多。唯一的区别是行数,但不是1-1的比例。你知道吗
我预计输出需要一段时间,可能2-3小时的基础上,我运行的其他模板。根据xlsxwriter documentation,他们用了不到30秒的时间写了12800行50列数据。他们的表显示了时间与行数的相对比例为1:1,所以应该需要大约一分钟?它目前需要6个多小时,所以明显出了问题。你知道吗
我使用的是MacBook pro 2017,2.3 GHz Intel Core i5和16 GB 2133 MHz LPDDR3。你知道吗
你知道吗@胡安帕.阿里维拉加在评论中提供了一个对我帮助很大的答案(见上文)。你知道吗
基本上,
.iloc
是非常低效的,通过使用.iat
,我可以将写时间从~6小时缩短到~7分钟。你知道吗相关问题 更多 >
编程相关推荐