如何在不复制列标签

时间:2017-04-01 22:33:07

标签: pandas xlsxwriter

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

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

话虽这么说,我的计划有效,而且比我要求的要多。但令我烦恼的是,CSV文件最终会为写入缓冲区的每个摘要统计数据帧重复相同的列标签,偶然也会重复到我的CSV文件中。有没有办法只写一次列标签,避免多个重复的标签行?

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

很抱歉没有任何上下文代码。没有它,我尽力解释。如有必要,我可以在获得免费机会时添加代码。

1 个答案:

答案 0 :(得分:3)

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

对于第二个问题,您可以使用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()

输出:

enter image description here