45

我想知道如何将新DataFrame数据添加到现有 csv 文件的末尾?to_csv没有提到这样的功能。

4

4 回答 4

78

您可以to_csv通过传递以追加模式打开的文件来追加使用:

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

使用header=None, 以免附加列名。

事实上,pandas 在to_csv使用mode参数时有一个包装器来做到这一点(见乔的回答):

df.to_csv(f, mode='a', header=False)
于 2013-06-16T15:52:32.907 回答
47

您还可以将文件模式作为参数传递给to_csv 方法

df.to_csv(file_name, header=False, mode = 'a')
于 2013-07-28T17:14:18.867 回答
4

我使用的一个小辅助函数(基于 Joe Hooper 的回答)和一些标题检查保护措施来处理这一切:

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)
于 2015-05-17T22:17:49.893 回答
3

感谢安迪,完整的解决方案:

f = open(filename, 'a') # Open file as append mode
df.to_csv(f, header = False)
f.close()
于 2013-06-16T16:21:27.293 回答