我想用pd.write_csv来编写" filename" (带标题)if" filename"不存在,否则附加到" filename"如果它存在如果我只使用命令:
df.to_csv('filename.csv',mode = 'a',header ='column_names')
写入或追加成功,但似乎每次发生追加时都会写入标题。
如果文件不存在,我怎么才能添加标题,如果文件存在则不添加标题?
答案 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)