2013-07-08 74 views
84

我想知道是否可以使用熊貓to_csv()函數將數據幀添加到現有的csv文件。 csv文件與加載的數據具有相同的結構。如何將pandas數據添加到現有的csv文件?

+6

我認爲@tlingf建議的方法是隻有更好,因爲他是用建設 - 在熊貓圖書館的功能。他建議定義模式爲「a」。 「A」代表APPEND 'df.to_csv('my_csv.csv',mode ='a',header = False)' – Ayrat

回答

119

可以追加模式追加到CSV通過opening the file

with open('my_csv.csv', 'a') as f: 
    df.to_csv(f, header=False) 

如果這是您的CSV,foo.csv

,A,B,C 
0,1,2,3 
1,4,5,6 

如果你讀了再追加,例如,df + 6

In [1]: df = pd.read_csv('foo.csv', index_col=0) 

In [2]: df 
Out[2]: 
    A B C 
0 1 2 3 
1 4 5 6 

In [3]: df + 6 
Out[3]: 
    A B C 
0 7 8 9 
1 10 11 12 

In [4]: with open('foo.csv', 'a') as f: 
      (df + 6).to_csv(f, header=False) 

foo.csv變爲:

,A,B,C 
0,1,2,3 
1,4,5,6 
0,7,8,9 
1,10,11,12 
+0

謝謝@Andy Hayden – Samatix

+0

也許把這個添加到食譜? – Jeff

+0

@Jeff oop顯然[this one](http://stackoverflow.com/questions/17134942/pandas-dataframe-output-end-of-csv)是[already there](http://pandas.pydata.org/ pandas-docs/dev/cookbook.html#csv)(我知道我之前已經回答了這個問題!)我想用另一種方式來欺騙它:s –

203

您可以在熊貓指定的Python寫模式to_csv功能。爲了追加它是'a'。

你的情況:

df.to_csv('my_csv.csv', mode='a', header=False) 

默認模式爲 'W'。

14

我與一些頭使用檢查保障措施來處理這一切能輔助函數:

def appendDFToCSV_void(df, csvFilePath, sep=","): 
    import os 
    if not os.path.isfile(csvFilePath): 
     df.to_csv(csvFilePath, mode='a', index=False, sep=sep) 
    elif len(df.columns) != len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns): 
     raise Exception("Columns do not match!! Dataframe has " + str(len(df.columns)) + " columns. CSV file has " + str(len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns)) + " columns.") 
    elif not (df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all(): 
     raise Exception("Columns and column order of dataframe and csv file do not match!!") 
    else: 
     df.to_csv(csvFilePath, mode='a', index=False, sep=sep, header=False) 
2

有點遲到了,但你也可以使用一個上下文管理器,如果你打開和關閉您的文件多次,或記錄數據,統計等

from contextlib import contextmanager 
import pandas as pd 
@contextmanager 
def open_file(path, mode): 
    file_to=open(path,mode) 
    yield file_to 
    file_to.close() 


##later 
saved_df=pd.DataFrame(data) 
with open_file('yourcsv.csv','r') as infile: 
     saved_df.to_csv('yourcsv.csv',mode='a',header=False)` 
0

與pyspark dataframes最初開始 - 我類型轉換錯誤給定模式/列類型中(轉換爲熊貓DF的時,然後附加到CSV)我的pyspark數據框

迫使每個DF所有列是字符串類型,然後追加這CSV解決如下問題:

with open('testAppend.csv', 'a') as f: 
    df2.toPandas().astype(str).to_csv(f, header=False) 
相關問題