2017-04-01 54 views
1

我有一個關於寫入數據幀的數據到一個文件中的兩個問題:如何編寫多dataframes到同一張紙上,而無需複製列標籤

我的程序在數據幀的許多分組的行生成彙總統計,並保存到在完成時寫入我的output.csv文件的StringIO緩衝區。我有一種感覺,pd.concat會更適合,但我無法得到它的工作。當我有機會時,我可以嘗試添加一段代碼,希望有人能夠解釋如何正確連接,我認爲這將解決我的問題。

這就是說,我的程序工作,這是超過我可以要求。儘管如此,我最關心的是CSV文件如何最終爲寫入緩衝區的每個彙總統計數據幀重複使用相同的列標籤,並順便將它們複製到我的CSV文件中。有沒有辦法只寫一次列標籤並避免多個重複標籤行?

我的第二個問題是關於寫入Excel以跳過不必要的複製和粘貼。就像我以前的問題一樣,這只是一個小小的障礙,但仍然讓我感到不安,因爲我想以正確的方式做事。問題是我想要將所有幀寫入同一張表。爲避免覆蓋相同的數據,有必要使用緩衝區來存儲數據直到結束。沒有一個文檔似乎對我的特殊情況有所幫助。我設計了一個解決方法:xlwt緩衝區 - > output.write(buffer.getvalue()) - > pd.to_csv(輸出),然後通過pd.read_csv重新導入同一文件,最後添加另一個將數據框寫入Excel的寫入器。在完成所有這些工作後,我終於堅持使用CSV的簡單性,因爲Excel作家實際上放大了重複行的醜陋性。關於如何更好地處理我的緩衝區問題的任何建議,因爲我更願意將Excel編寫器簡化和控制爲CSV輸出。

對不起,沒有任何上下文的代碼。我厭倦了我最好的解釋沒有它。如有需要,我可以在有機會獲得免費機會時添加代碼。

+0

關於第二個問題,請參閱:http://stackoverflow.com/questions/32957441/putting-many-python-pandas -dataframes-to-one-excel-worksheet – bernie

+0

這對我不起作用,因爲我需要首先初始化一個空白數據框,這是我不能做的。 – Maksim

+0

@Maksim你的問題是相當一般的,請包括代碼,以便人們可以幫助你。 – splinter

回答

2

我同意連接數據幀可能是一個更好的解決方案。您應該可以針對某些示例代碼/數據框專門提出問題。

對於第二個問題,您可以使用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

+0

謝謝!偏移線很簡單但很精彩。 – Maksim

+0

這是我的問題到代碼示例的第一部分:http://stackoverflow.com/questions/43170601/how-to-use-pd-concat-with-an-un-initiated-dataframe – Maksim

相關問題