Pandas Выход данных DataFrame csv

Интересно, как добавить новые данные DataFrame в конец существующего файла csv? To_csv не упоминает такую ​​функциональность. Заранее спасибо.

Ответ 1

Вы можете добавить 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)

Ответ 2

Вы также можете передать файловый режим в качестве аргумента методу to_csv

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

Ответ 3

Небольшая вспомогательная функция, которую я использую (на основе ответа Джо Хупера) с некоторыми контрольными средствами проверки заголовков для обработки всего этого:

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)

Ответ 4

Спасибо Andy, полное решение:

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