Интересно, как добавить новые данные DataFrame в конец существующего файла csv? To_csv не упоминает такую функциональность. Заранее спасибо.
Pandas Выход данных DataFrame 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()