如何在不复制列标签的情况下将多个数据框写入同一张表

Posted

技术标签:

【中文标题】如何在不复制列标签的情况下将多个数据框写入同一张表【英文标题】:How to write a multiple dataframes to same sheet without duplicating the column labels 【发布时间】:2017-08-27 00:38:56 【问题描述】:

关于将数据帧数据写入文件,我有两个问题:

我的程序对数据帧的许多分组行生成摘要统计信息,并将这些统计信息保存到 StringIO 缓冲区,该缓冲区在完成时写入我的 output.csv 文件。我觉得 pd.concat 会更适合,但我无法让它发挥作用。当我有机会时,我可以尝试添加一段代码,希望有人能解释如何正确连接,我认为这会解决我的问题。

话虽如此,我的程序有效,这超出了我的要求。但困扰我的是 CSV 文件最终如何为写入缓冲区并顺便写入我的 CSV 文件的每个汇总统计数据帧重复相同的列标签。有没有办法只写一次列标签并避免多个重复的标签行?

我的第二个问题是关于写入 Excel 以跳过不必要的复制和粘贴。就像我之前的问题一样,这只是一个小障碍,但仍然困扰着我,因为我想以正确的方式做事。问题是我希望将所有帧都写入同一张纸。为了避免覆盖相同的数据,有必要使用缓冲区来存储数据直到结束。在我的特殊情况下,这些文档似乎都没有帮助。我设计了一个解决方法:xlwt 到缓冲区 -> output.write(buffer.getvalue()) -> pd.to_csv(output) 然后通过 pd.read_csv 重新导入同一个文件,最后添加另一个将数据帧写入 Excel 的写入器。在完成所有这些工作之后,我最终还是坚持使用 CSV 的简单性,因为 Excel 编写器实际上放大了重复行的丑陋。关于如何更好地处理我的缓冲区问题的任何建议,因为我更喜欢 Excel 编写器的流线型和控制而不是 CSV 输出。

很抱歉没有任何上下文代码。没有它,我已经尽力解释了。如有必要,我可以在有空的时候添加代码。

【问题讨论】:

第二个问题请见:***.com/questions/32957441/… 这对我不起作用,因为我需要先初始化一个空白数据框,这是我做不到的。 @Maksim 您的问题很笼统,请附上代码以便人们可以帮助您。 【参考方案1】:

我同意连接数据帧可能是更好的解决方案。您可能应该使用一些示例代码/数据框专门针对该问题提出问题。

对于第二个问题,您可以使用 startrowstartcol 参数将数据框定位在 Excel 工作表中。可以使用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()

输出:

【讨论】:

谢谢!偏移线很简单但很精彩。 这是我对第一部分的问题,带有代码示例:***.com/questions/43170601/…

以上是关于如何在不复制列标签的情况下将多个数据框写入同一张表的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响其兄弟位置的情况下将 div 绝对定位在弹性框中? [复制]

如何在不生成 SettingWithCopyWarning 的情况下将列插入 DataFrame

我正在使用熊猫数据框,我需要在不使用循环的情况下将一整列纪元时间戳转换为人类时间

如何在不使用 BIOS 的情况下将数据写入显卡?

如何在不使用数据框的情况下将一行分解为多行?

如何在不使用库的情况下将默认名称“选择文件”更改为“选择文档”? [复制]