【问题标题】:Using constant memory with pandas xlsxwriter在 pandas xlsxwriter 中使用常量内存
【发布时间】:2021-04-05 20:16:14
【问题描述】:

我正在尝试使用以下代码将大型 pandas 数据帧写入 excel 工作表,如果我直接编写它,系统内存不足,这是一个可行的选择还是有其他选择?

writer = pd.ExcelWriter('Python Output Analysis.xlsx', engine='xlsxwriter',options=dict(constant_memory=True))

【问题讨论】:

  • 要使constant_memory 生效,您需要逐行编写,而我认​​为 pandas 逐列编写 col(待验证)。因此,您可能需要使用iterrows() 推出自己的excel 写作功能(不过我们的速度相当慢)。

标签: python-3.x excel pandas optimization xlsxwriter


【解决方案1】:

如果您的数据很大,请考虑使用原始文本文件保存数据。例如csv、txt等

df.to_csv('file.csv', index=False, sep=',')
df.to_csv('file.tsv', index=False, sep='\t')

或者拆分DataFrame,并保存到小文件中。

df_size = df.shape[0]
chunksize = df_size//10
for i in range(0, df_size, chunksize):
    # print(i, i+chunksize)
    dfn = df.iloc[i:i+chunksize,:]
    dfn.to_excel('...')  

【讨论】:

  • xlsx 不是存储大数据的可用格式。
  • 问题是它必须保存为excel
  • Excel 最多可以包含 1048576 行
  • 是的,行数通常不会超过 500k,但是当它将数据复制到输出文件时,它会占用大量内存,我想知道是否有任何方法可以避免这种情况
  • 拆分10个文件保存df怎么样。
【解决方案2】:

XlsxWriter 的constant_memory 模式可用于编写非常大的 Excel 文件,并且内存使用量很少,而且是恒定的。问题是数据需要按行顺序写入,并且(正如@Stef 在上面的 cmets 中指出的那样)Pandas 按列顺序写入 Excel。所以constant_memory 模式不适用于 Pandas ExcelWriter。

作为替代方案,您可以避免使用 ExcelWriter 并将数据从数据帧逐行直接写入 XlsxWriter。但是,从 Pandas 的角度来看,这会慢一些。

【讨论】:

  • 是的,我试过这个方法,执行起来很慢,仍然找不到更好的选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2016-08-10
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多