提问者:小点点

熊猫DataFrame csv输出端


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


共3个答案

匿名用户

您可以通过传递在附加模式下打开的文件,使用将其附加到\u csv

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

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

事实上,pandas有一个包装器,可以使用模式参数在to_csv中实现这一点(参见Joe的答案):

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

匿名用户

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

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

匿名用户

我使用的一个小助手功能(基于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)