【发布时间】:2013-06-12 15:56:52
【问题描述】:
我想知道如何将新的DataFrame 数据添加到现有 csv 文件的末尾? to_csv 没有提到这样的功能。
【问题讨论】:
标签: python csv pandas dataframe
我想知道如何将新的DataFrame 数据添加到现有 csv 文件的末尾? to_csv 没有提到这样的功能。
【问题讨论】:
标签: python csv pandas dataframe
您可以通过传递open in append mode 的文件来使用to_csv 追加:
with open(file_name, 'a') as f:
df.to_csv(f, header=False)
使用header=None,以免追加列名。
事实上,pandas 在to_csv 中使用mode 参数(see Joe's answer)有一个包装器:
df.to_csv(f, mode='a', header=False)
【讨论】:
to_csv 或文件名?我记得一个相关的问题,即 not 关闭文件导致他们的代码加速了 99%(IIRC 他们将数万次附加到同一个文件中)。
您也可以将文件模式作为参数传递给to_csv method
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)
【讨论】:
感谢安迪,完整的解决方案:
f = open(filename, 'a') # Open file as append mode
df.to_csv(f, header = False)
f.close()
【讨论】:
with 它会为你清理它。 :)