我想知道如何将新的DataFrame
数据添加到现有csv文件的末尾? to_csv
没有提到这样的功能。
to_csv
函数还是传递了文件名?我记得有一个相关问题,如果不关闭文件,会导致他们的代码速度提高了99%(如果我没记错的话,他们一次追加到了相同文件中成千上万次)。 - Andy Haydenclose
是慢的部分。我的猜测是触发器将缓冲区从内存写入磁盘(复制整个文件),而Unix则有一些更聪明的文件系统...不太确定。我强烈建议研究HDF5/pytables。 - Andy Hayden以下是我使用的一些小助手函数(基于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)
f = open(filename, 'a') # Open file as append mode
df.to_csv(f, header = False)
f.close()