如何用Pandas的concat替代append实现两DataFrame写入同CSV且中间有空行
问题场景
现有两个DataFrame:
# df1 State Score 0 Arizona AZ 62 1 Georgia GG 47 2 Newyork NY 55 3 Indiana IN 74 4 Florida FL 31 # df3 letter number animal 0 c 3 cat 1 d 4 dog
需要生成中间带空行的CSV文件,格式如下:
State Score Arizona AZ 62 Georgia GG 47 Newyork NY 55 Indiana IN 74 Florida FL 31 letter number animal c 3 cat d 4 dog
原使用append方法添加空Series实现需求,但收到append即将弃用的警告;改用concat后无法生成两组数据间的空行,需解决该问题。
解决方案
方法1:用concat合并空行DataFrame
空Series无法被concat识别为有效行,需创建与df1列数匹配的空行DataFrame:
import pandas as pd # 生成一行全为NA的空行,列名与df1一致 empty_row = pd.DataFrame([[pd.NA]*len(df1.columns)], columns=df1.columns) # 合并df1与空行 df1_with_empty = pd.concat([df1, empty_row], ignore_index=True) # 写入CSV,将NA转为空字符串 df1_with_empty.to_csv('foo.csv', index=False, na_rep='') # 追加写入df3 df3.to_csv('foo.csv', mode='a', index=False)
方法2:直接操作CSV文件追加空行
无需修改DataFrame,写完df1后手动写入空行再追加df3:
# 写入df1到CSV df1.to_csv('foo.csv', index=False) # 打开文件追加空行 with open('foo.csv', 'a') as f: f.write('\n') # 追加写入df3 df3.to_csv('foo.csv', mode='a', index=False)
原因说明
pd.concat([df1, empty_df])中,空Series没有有效行数据,不会被添加到合并后的DataFrame中;而空行DataFrame包含一行NA值,配合na_rep=''参数写入CSV时会转换为空行,从而实现需求。
内容的提问来源于stack exchange,提问作者Giulia
相关产品推荐
相关产品推荐

