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

标签 python pandas python-2.7 xlsxwriter

我正在创建一个约 27k 行的 pandas 数据框,其中包含 8 列文本和 30 列 float 。从 Google BigQuery 中提取数据并创建 DataFrame 和其他格式化变量大约需要 5 分钟。然而,一旦我开始写作过程,我就会遇到一堵砖墙。将此数据写入工作表平均需要 6 个多小时。它每秒写入约 1.2 行。我制作的其他 Excel 模板花费的时间至少减少了 70 倍,每秒写入 70-250 多行。我不明白为什么要花这么长时间。有什么事情我可以做得更有效吗?

我尝试过使用Pandas' integration with xlsxwriter但我不能/不知道如何使用单元格级格式化。我发现的所有内容似乎都表明它不支持这一点。当我使用它时,查询、创建和写入总共需要 8 分钟。添加单元格级格式设置怎么会花费这么多时间?

我还尝试在创建工作簿时添加 'constant_memory':True 选项,效果可以忽略不计。我不确定还有什么可以尝试的。我查看了正在访问的数据的大小,数据帧约为 24mb,格式变量约为 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 秒的时间写入了 12,800 行 50 列数据。他们的表显示时间与行数成相对 1 比 1 的比例,所以应该需要我大约一分钟?目前需要 6 个多小时,因此显然出现了问题。

我使用的是配备 2.3 GHz Intel Core i5 和 16 GB 2133 MHz LPDDR3 的 MacBook Pro 2017。

最佳答案

@juanpa.arrivilillaga 在评论中提供了一个答案,这对我帮助很大(见上文)。

基本上,.iloc 的效率极其低下,通过使用 .iat,我已经能够将写入时间从约 6 小时缩短到约 7 分钟。

关于python - 写入约 27k 行 38 列数据需要约 6 个多小时,这正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56366066/

相关文章:

python - 如何删除 CGI 正在显示的临时文件(图像)?

python - 根据条件 pandas python 在数据框中删除行

python - 对象不可逆Django是什么意思

python - Pandas groupby 如何计算范围内的计数

python - 使用 Python 分析大量传感器数据

python - 使用 pandas python 中另一个数据框中另一列的索引更新数据框中的列

python - 使用 Python 检查 .dat 文件是否存在文件

python - 为什么 vstack 会改变元素的类型?我该如何解决这个问题?

python - 在Python中循环不按顺序的列表

图像分割 : Create polygons