2013-07-08 29 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) 
相关问题