熊猫写CSV - 追加与写

时间:2015-06-22 23:27:29

标签: python csv pandas

我想用pd.write_csv来编写" filename" (带标题)if" filename"不存在,否则附加到" filename"如果它存在如果我只使用命令:

     df.to_csv('filename.csv',mode = 'a',header ='column_names')

写入或追加成功,但似乎每次发生追加时都会写入标题。

如果文件不存在,我怎么才能添加标题,如果文件存在则不添加标题?

5 个答案:

答案 0 :(得分:43)

不确定pandas中是否有办法,但检查文件是否存在是一种简单的方法:

import os
# if file does not exist write header 
if not os.path.isfile('filename.csv'):
   df.to_csv('filename.csv', header='column_names')
else: # else it exists so append without writing the header
   df.to_csv('filename.csv', mode='a', header=False)

答案 1 :(得分:8)

with open(filename, 'a') as f:
    df.to_csv(f, mode='a', header=f.tell()==0)

它将在第一次写入文件时添加标头

答案 2 :(得分:1)

在Pandas数据框“ to_csv”函数中,如果csv文件存在并附加到现有文件,则使用header = False。

    import os

    hdr = False  if os.path.isfile('filename.csv') else True
    df.to_csv('filename.csv', mode='a', header=hdr)

答案 3 :(得分:0)

上述解决方案很棒,但是我有道德义务在此处包括pathlib解决方案:

initialization

或者(取决于您的内联首选项):

from pathlib import Path

file_path = Path(filename)
if file_path.exists():
   df.to_csv(file_path, header=False, mode='a')
else:
   df.to_csv(file_path, header=True, mode='w')

答案 4 :(得分:0)

除了文件存在检查之外,您还可以检查非零文件大小。因为如果文件存在但文件大小为零,即没有内容的文件,则添加标题是有意义的。我发现它在某些特殊情况下很有帮助

import os.path
header_flag = False if (os.path.exists(fpath) and (os.path.getsize(fpath) > 0)) else True
df.to_csv(fpath, mode='a', index=False, header=header_flag)