写入 ~27k 行 38 列数据需要 ~6 个多小时是否正常?

Is it normal for writing ~27k rows 38 cols of data to take ~6+ hours?

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

我试过使用 Pandas' integration with xlsxwriter,但我t/don不知道如何使用它进行单元格级格式化。我发现的一切似乎都表明它不支持这一点。当我真正使用它时,查询、创建和写入总共需要 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 列数据。他们的 table 显示时间比例与行数相对 1 比 1,所以我应该花一分钟左右?目前需要 6 个多小时,所以显然有问题。

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

@juanpa.arrivillaga 在评论中提供了对我帮助很大的答案(见上文)。

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