如何在不复制列标签的情况下将多个数据帧写入相同的 sheet
How to write a multiple dataframes to same sheet without duplicating the column labels
我有两个关于将数据帧数据写入文件的问题:
我的程序对数据帧的许多分组行生成汇总统计信息,并将它们保存到 StringIO 缓冲区,该缓冲区在完成时写入我的 output.csv 文件。我觉得 pd.concat 会更合适,但我无法让它发挥作用。我可以在有机会时尝试添加一段代码,希望有人可以解释如何正确连接,我认为这将解决我的问题。
话虽这么说,但我的程序运行良好,超出了我的要求。但让我烦恼的是,CSV 文件最终如何为写入缓冲区并顺便写入我的 CSV 文件的每个摘要统计数据帧重复相同的列标签。有没有办法只写一次列标签并避免多个重复的标签行?
我的第二个问题是关于写信给 Excel 以跳过不必要的复制和粘贴。就像我之前的问题一样,这只是一个小障碍,但仍然困扰着我,因为我想以正确的方式做事。问题是我希望所有帧都写入相同的 sheet。为了避免覆盖相同的数据,有必要使用缓冲区来存储数据直到结束。 None 的文档似乎对我的特殊情况有所帮助。我设计了一个解决方法:xlwt to buffer -> output.write(buffer.getvalue()) -> pd.to_csv(output) 然后通过 pd.read_csv 重新导入同一个文件,最后添加另一个将数据帧写入 Excel 的编写器。在完成所有这些工作之后,我最终还是坚持使用 CSV 的简单性,因为 Excel 作者实际上放大了复制行的丑陋之处。关于如何更好地处理我的缓冲区问题的任何建议,因为我更喜欢 Excel writer 的简化和控制而不是 CSV 输出。
抱歉没有任何上下文代码。没有它,我已经尽力解释了。如果有必要,我可以在有空的时候添加代码。
我同意连接数据帧可能是更好的解决方案。你可能应该用一些样本 codes/dataframes.
专门问一个问题
对于第二个问题,您可以使用 startrow
和 startcol
参数在 Excel 工作表中定位数据框。您可以使用 header
布尔参数跳过重复的 header,并且可以使用 index
布尔参数跳过索引。
例如:
import pandas as pd
# Create some Pandas dataframes from some data.
df1 = pd.DataFrame({'Data': [11, 12, 13, 14]})
df2 = pd.DataFrame({'Data': [21, 22, 23, 24]})
df3 = pd.DataFrame({'Data': [31, 32, 33, 34]})
df4 = pd.DataFrame({'Data': [41, 42, 43, 44]})
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_test.xlsx', engine='xlsxwriter')
# Add the first dataframe to the worksheet.
df1.to_excel(writer, sheet_name='Sheet1', index=False)
offset = len(df1) + 1 # Add extra row for column header.
# Add the other dataframes.
for df in (df2, df3, df4):
# Write the datafram without a column header or index.
df.to_excel(writer, sheet_name='Sheet1', startrow=offset,
header=False, index=False)
offset += len(df)
# Close the Pandas Excel writer and output the Excel file.
writer.save()
输出:
我有两个关于将数据帧数据写入文件的问题:
我的程序对数据帧的许多分组行生成汇总统计信息,并将它们保存到 StringIO 缓冲区,该缓冲区在完成时写入我的 output.csv 文件。我觉得 pd.concat 会更合适,但我无法让它发挥作用。我可以在有机会时尝试添加一段代码,希望有人可以解释如何正确连接,我认为这将解决我的问题。
话虽这么说,但我的程序运行良好,超出了我的要求。但让我烦恼的是,CSV 文件最终如何为写入缓冲区并顺便写入我的 CSV 文件的每个摘要统计数据帧重复相同的列标签。有没有办法只写一次列标签并避免多个重复的标签行?
我的第二个问题是关于写信给 Excel 以跳过不必要的复制和粘贴。就像我之前的问题一样,这只是一个小障碍,但仍然困扰着我,因为我想以正确的方式做事。问题是我希望所有帧都写入相同的 sheet。为了避免覆盖相同的数据,有必要使用缓冲区来存储数据直到结束。 None 的文档似乎对我的特殊情况有所帮助。我设计了一个解决方法:xlwt to buffer -> output.write(buffer.getvalue()) -> pd.to_csv(output) 然后通过 pd.read_csv 重新导入同一个文件,最后添加另一个将数据帧写入 Excel 的编写器。在完成所有这些工作之后,我最终还是坚持使用 CSV 的简单性,因为 Excel 作者实际上放大了复制行的丑陋之处。关于如何更好地处理我的缓冲区问题的任何建议,因为我更喜欢 Excel writer 的简化和控制而不是 CSV 输出。
抱歉没有任何上下文代码。没有它,我已经尽力解释了。如果有必要,我可以在有空的时候添加代码。
我同意连接数据帧可能是更好的解决方案。你可能应该用一些样本 codes/dataframes.
专门问一个问题对于第二个问题,您可以使用 startrow
和 startcol
参数在 Excel 工作表中定位数据框。您可以使用 header
布尔参数跳过重复的 header,并且可以使用 index
布尔参数跳过索引。
例如:
import pandas as pd
# Create some Pandas dataframes from some data.
df1 = pd.DataFrame({'Data': [11, 12, 13, 14]})
df2 = pd.DataFrame({'Data': [21, 22, 23, 24]})
df3 = pd.DataFrame({'Data': [31, 32, 33, 34]})
df4 = pd.DataFrame({'Data': [41, 42, 43, 44]})
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_test.xlsx', engine='xlsxwriter')
# Add the first dataframe to the worksheet.
df1.to_excel(writer, sheet_name='Sheet1', index=False)
offset = len(df1) + 1 # Add extra row for column header.
# Add the other dataframes.
for df in (df2, df3, df4):
# Write the datafram without a column header or index.
df.to_excel(writer, sheet_name='Sheet1', startrow=offset,
header=False, index=False)
offset += len(df)
# Close the Pandas Excel writer and output the Excel file.
writer.save()
输出: