我正在创建一个大约27,000行的熊猫数据框,其中包含8列文本和30列浮点数。从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个小时。根据{{3}}的说法,他们用不到30秒的时间就写入了具有50列数据的12,800行。他们的表显示时间与行数成比例地从1到1缩放,所以我应该花一分钟左右的时间吗?目前需要6个小时以上,因此显然存在问题。
我正在使用MacBook Pro 2017和2.3 GHz Intel Core i5和16 GB 2133 MHz LPDDR3。
答案 0 :(得分:1)
@ juanpa.arrivillaga在对我有很大帮助的评论中提供了答案(请参见上文)。
基本上,.iloc
的效率极低,通过使用.iat
,我已经能够将写入时间从大约6小时减少到大约7分钟。