循环导出DataFrame至CSV时如何避免重复输出表头?
解决循环导出DataFrame时重复表头的问题
这个问题我碰到过好几次啦,其实就是pandas的to_csv方法默认每次写入都会输出表头导致的,给你两种简单靠谱的解决方案:
方法一:用标志位控制表头仅写入一次
你可以加一个布尔变量作为标志,第一次循环时输出表头,之后的循环跳过表头输出。修改后的代码如下:
f = open("Test.csv", "w+") first_write = True # 标记是否是第一次写入 for junc in Junctions: conn = model.connections(Junction = junc) DF4dictConn = pd.DataFrame(conn) DF4dictConn['Junction'] = junc DF4dictConn.set_index('Junction', inplace=True) # 第一次写入时开启表头,后续关闭 DF4dictConn.to_csv(f, sep=',', header=first_write) first_write = False # 写完第一次后切换标志 f.close() # 记得手动关闭文件流
核心是利用to_csv的header参数:当设为True时输出表头,False时跳过。通过标志位控制这个参数,就能保证表头只出现一次。
方法二:合并所有DataFrame后一次性导出
如果你的数据量不是特别大,更推荐这种方法——先把所有循环生成的DataFrame收集到列表里,最后合并成一个大DataFrame再导出。这样既避免了重复表头,还减少了文件IO操作,效率更高:
dfs_list = [] # 存储每个循环生成的DataFrame for junc in Junctions: conn = model.connections(Junction = junc) DF4dictConn = pd.DataFrame(conn) DF4dictConn['Junction'] = junc DF4dictConn.set_index('Junction', inplace=True) dfs_list.append(DF4dictConn) # 合并所有DataFrame并导出,自然只会输出一次表头 pd.concat(dfs_list).to_csv("Test.csv", sep=',')
这种写法代码更简洁,逻辑也更清晰,后期维护起来更方便~
内容的提问来源于stack exchange,提问作者CodeMaster
相关产品推荐
相关产品推荐

