【问题标题】:python + pandas - dump df to excel in a looppython + pandas - 将df转储到循环中
【发布时间】:2018-11-16 14:12:07
【问题描述】:

我有一个包含 100 多个 panda dfs 的字典。

我想遍历字典中的每个 df 并将其转储到 excel 中,所有这些都在一张纸上,一个接一个,中间有 1 个空白行。

我的尝试:

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
workbook = writer.book

for key, values in dd.iteritems():
    df = dd[key]['chart_data']
    df.to_excel(writer, sheet_name='Sheet 1', index=False)

writer.save()
workbook.close()

我认为它会覆盖 dfs。

有什么建议吗?

【问题讨论】:

  • 不是df被覆盖,而是每次都粘贴到excel表的同一部分。因此,您实际上是在覆盖 Excel 中的信息。在.toexcel() 中分配startrow。默认情况下,它从左上角粘贴,这不是您想要的。

标签: python excel pandas dataframe


【解决方案1】:

startrow 听起来像是您的解决方案:

start_row = 0
for key, values in dd.iteritems():
    df = dd[key]['chart_data']
    df.to_excel(writer, sheet_name='Sheet 1', index=False, startrow=start_row)
    # Edited to respect your requirement for 1 blank row
    # after each df
    start_row = start_row + len(df) + 1 # or df.shape[0] et cetera

它只是选择开始转储到哪一行。您可能还想指定startcol,它的工作原理相同,但我认为这是按原样工作的。

编辑:另一个,也许更好的方法是concat。比如:

df = pd.concat([dd[key]["chart_data"] for key, values in dd.iteritems()])
df.to_excel(...)

但这只有在您的 df 适合内存时才有效。

【讨论】:

  • 如果内存放不下,怎么已经在dict了?
  • 因为现在dictdf 必须适合内存@MuhammadAhmad
  • start_row = start_row + len(df)+1 获取 df 转储之间的空白行?或 start_row += len(df)+1 以获得微小的速度和内存增益。
  • 我看不出转储之间出现空白行的任何原因,而且@Mark_Anderson 的问题也不存在。尽管如果所写的答案在每次迭代中覆盖了前一个 df 的最后一行,那么您的编辑将是强制性的。我认为没有,但我现在无法测试
  • 在问题中,第二句:“我想遍历字典中的每个 df 并将其转储到 excel 中,全部在一张纸上,一个接一个,中间有 1 个空白行。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2021-10-27
  • 1970-01-01
  • 2014-10-28
  • 2021-04-17
相关资源
最近更新 更多