写入约27k行38列数据需要约6个多小时,这正常吗?

2024-04-23 10:54:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个包含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。你知道吗


Tags: 数据in模板formatdfformain格式
1条回答
网友
1楼 · 发布于 2024-04-23 10:54:28

你知道吗@胡安帕.阿里维拉加在评论中提供了一个对我帮助很大的答案(见上文)。你知道吗

基本上,.iloc是非常低效的,通过使用.iat,我可以将写时间从~6小时缩短到~7分钟。你知道吗

相关问题 更多 >