You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并列名不同的DataFrame,导出CSV时避免NaN产生的多余逗号

解决方案

方案1:分别写入同一文件(无需合并,无冗余逗号)

如果不需要统一的表头,直接将两个DataFrame按顺序追加写入同一个CSV即可,不会产生多余的NaN空值和逗号:

import pandas as pd

xyarr= [[0,1,2],[1,1,3],[2,1,2]]
df1 = pd.DataFrame(xyarr, columns=['a', 'b','c'])
df2 = pd.DataFrame([['text','text2']], columns=['x','y'])

# 写入第一个DataFrame,带表头
df1.to_csv("output.csv", index=False)
# 追加写入第二个DataFrame,不重复写表头
df2.to_csv("output.csv", index=False, header=False, mode="a")

导出效果:

a,b,c
0,1,2
1,1,3
2,1,2
x,y
text,text2

方案2:合并后清理尾部空逗号

如果必须保留concat合并后的完整表头结构,可以在导出后清理每行尾部的空值对应的多余逗号:

import pandas as pd
import csv

xyarr= [[0,1,2],[1,1,3],[2,1,2]]
df1 = pd.DataFrame(xyarr, columns=['a', 'b','c'])
df2 = pd.DataFrame([['text','text2']], columns=['x','y'])
df3 = pd.concat([df1,df2],axis=0, ignore_index=True)

# 先导出为临时文件,NaN替换为空字符串
df3.to_csv("temp.csv", index=False, na_rep="")

# 逐行清理尾部空值后写入最终文件
with open("temp.csv", "r", encoding="utf-8") as f_in, open("output.csv", "w", encoding="utf-8", newline="") as f_out:
    reader = csv.reader(f_in)
    writer = csv.writer(f_out)
    for row in reader:
        # 移除行尾连续空值
        while row and row[-1] == "":
            row.pop()
        writer.writerow(row)

导出效果(第一行为完整合并表头):

a,b,c,x,y
0.0,1.0,2.0
1.0,1.0,3.0
2.0,1.0,2.0
text,text2

方案3:列映射后合并(适合列有对应关系的场景)

如果两个DataFrame的列存在实际对应关系,可重命名列后合并,不会产生NaN和多余逗号:

import pandas as pd

xyarr= [[0,1,2],[1,1,3],[2,1,2]]
df1 = pd.DataFrame(xyarr, columns=['a', 'b','c'])
df2 = pd.DataFrame([['text','text2']], columns=['x','y'])

# 重命名df2列名和df1对齐,缺失的列补空值
df2_aligned = df2.rename(columns={"x":"a", "y":"b"}).reindex(columns=df1.columns, fill_value="")
df3 = pd.concat([df1, df2_aligned], axis=0, ignore_index=True)

df3.to_csv("output.csv", index=False)

导出效果:

a,b,c
0,1,2
1,1,3
2,1,2
text,text2,

内容的提问来源于stack exchange,提问作者Epsilon Eridani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:18:03