pandas DataFrame输出csv的结尾

时间:2013-06-16 15:40:41

标签: python csv pandas dataframe

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

4 个答案:

答案 0 :(得分:52)

您可以通过传递to_csv的文件

来使用open in append mode进行追加
with open(file_name, 'a') as f:
    df.to_csv(f, header=False)

使用header=None,以便不附加列名称。

事实上,pandas有一个包装器可以使用to_csv参数(see Joe's answer)在mode中执行此操作:

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

答案 1 :(得分:35)

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

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

答案 2 :(得分:3)

我使用的一个小辅助函数(基于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)

答案 3 :(得分:2)

感谢Andy,完整的解决方案:

f = open(filename, 'a') # Open file as append mode
df.to_csv(f, header = False)
f.close()