【问题标题】:Limit writing of pandas to_excel to 1 million rows per sheet将 pandas to_excel 的写入限制为每张纸 100 万行
【发布时间】:2021-01-10 02:08:09
【问题描述】:

我有一个包含大约 2800 万行(5 列)的数据框,我正在努力将它写入一个限制为 1,048,576 行的 Excel,我不能在多个工作簿中拥有它,所以我会需要将 28Mi 拆分成 28 张等等。

这就是我正在做的:

writer = pd.ExcelWriter('NAME_XX-' + mes +'-' + ano + '_XXX.xlsx', engine = "xlsxwriter")

notMor.to_excel(writer, engine='xlsxwriter', index=False)

并收到此错误:

我很难将数据框分成 27 个不同的数据框,然后将每个数据框保存在工作簿上,但没有更简单的方法吗?

【问题讨论】:

  • 您可以使用df.groupby(df.index//1000000) 来获得 28 个分组的子 dfs...但是复制那么多数据,拆分成许多工作表,对于 excel 来说不是一个好习惯。您最好创建一个二进制文件文件并从excel连接到它,粘贴数据后你将如何处理excel?
  • 我很难将数据框分成 27 个不同的数据框,然后将每个数据框保存在工作簿上,但没有更简单的方法吗? 那有多难? for 循环应该可以解决问题,对吧?
  • 我需要一个工作簿中的数据,而不需要任何指向另一个文件的链接。我知道这将是一个巨大的 xlsx 文件,需要很长时间才能打开,但这是我必须呈现的。我想我必须拆分 df,我希望像传递给“to_excel”的参数之类的东西可以限制行数,然后继续创建和填充新工作表。
  • @LucasMarques 你解决过这个问题吗?我有一个非常相似的问题。

标签: python excel pandas dataframe


【解决方案1】:
  1. 在 Excel 2016 和 Excel for Microsoft 365 中,使用 Data > Get & Transform Data > Get Data 从任意号码导入数据外部数据源,例如文本文件、Excel 工作簿、网站、Microsoft Access、SQL Server 或其他包含多个相关表的关系数据库。
    • 在 Excel 2013 和 2010 中,转到 Power Query > 获取外部数据,然后选择您的数据源。
  2. Excel 提示您选择一个表。如果您想从同一数据源获取多个表,请选中启用多个表的选择选项。当您选择多个表时,Excel 会自动为您创建一个数据模型。
  3. 选择一个或多个表,然后点击加载

  • 这个例子有 3M 行

【讨论】:

  • 有没有办法通过代码做到这一点?我需要运行此脚本并准备好文件,而无需打开 xlsx 文件。
  • @LucasMarques 我想不清楚你需要 Excel 做什么。无论文件格式(csv 或 xlsx)如何,如果您使用 Excel,它仍然需要加载。使用数据模型,您将拥有一个 Excel 文件 (my.xlsx),在该文件中,您将配置与 my.csv 的数据模型连接。打开 Excel 文件时,它会连接到 csv,如果有新信息,您可以刷新它。此外,数据模型可以连接到多个文件。
【解决方案2】:

简单/简单/快速 --> 将您的数据从 Pandas 下载到 1000000 的 CSV 文件中,然后让 Excel 打开它。 Excel 将相应地调整并跨多个工作表打开。

您可以调整一些代码:

#split file code
lines_per_file = 1000000
smallfile = None
with open('Plan.txt') as bigfile:
    for lineno, line in enumerate(bigfile):
        if lineno % lines_per_file == 0:
            if smallfile:
                smallfile.close()
            small_filename = 'small_file_{}.txt'.format(lineno + lines_per_file)
            smallfile = open(small_filename, "w")
        smallfile.write(line)
    if smallfile:
        smallfile.close()

【讨论】:

  • 感谢您的回答,但这有点像我所说的拆分 df,然后将每个 1mi 组保存在不同的工作表上,但使用您的代码,我将保存到 csv 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多