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

使用concat/append/merge堆叠3列DataFrame后列数异常及列序错乱求助

解决合并DataFrame后列数异常、顺序错乱的问题

嘿,我来帮你搞定这个头疼的问题!你用append或concat合并两个3列的DataFrame后得到5列,还出现列顺序错乱,核心原因几乎肯定是两个DataFrame的列名不匹配——哪怕看起来都是3列,但列名可能存在大小写差异、空格、拼写不一致,或者其中一个DF多了索引列,导致pandas把它们当成不同的列处理,最终列数叠加、顺序混乱。

第一步:排查问题根源

先运行下面的代码,确认两个DataFrame的列名细节:

print("dfTrain列名:", dfTrain.columns.tolist())
print("dfTrain2列名:", dfTrain2.columns.tolist())

你大概率会发现,两者的列名并非完全一致(比如一个是['text', 'label', 'id'],另一个是['Text', 'label', 'ID'],或者有一列名称完全不同)。另外注意:你代码里的dfTrain2.reset_index()没有赋值,等于白跑,这步如果要执行,得写成dfTrain2 = dfTrain2.reset_index(drop=True),不然会生成一个额外的index列,也会导致列数增加。

第二步:针对性解决

情况1:列名仅存在大小写/空格差异

统一列名格式,比如全部转小写并去掉首尾空格:

# 统一列名格式
dfTrain.columns = dfTrain.columns.str.strip().str.lower()
dfTrain2.columns = dfTrain2.columns.str.strip().str.lower()

情况2:列名完全不同,但对应数据类型一致

如果两个DF的3列数据是同一类(比如都是文本、标签、ID),只是列名起得不一样,手动重命名对齐:

# 把dfTrain2的列名改成和dfTrain一致,根据实际列名调整
dfTrain2.rename(
    columns={'text_en': 'text', 'label_en': 'label', 'id_en': 'id'},
    inplace=True
)
# 确保dfTrain的列名也是目标名称(如果需要的话)
dfTrain.rename(
    columns={'text_hi': 'text', 'label_hi': 'label', 'id_hi': 'id'},
    inplace=True
)

情况3:列顺序不一致(可选但稳妥)

确保两个DF的列顺序完全相同,避免合并后顺序错乱:

dfTrain2 = dfTrain2[dfTrain.columns.tolist()]

第三步:重新执行合并操作

推荐使用concat(因为append已经被pandas弃用了):

frames = [dfTrain, dfTrain2]
merged_df = pd.concat(frames, axis=0, ignore_index=True)

如果坚持用append,也可以:

merged_df = dfTrain.append(dfTrain2, ignore_index=True)

验证结果

最后检查合并后的列数和列名:

print("合并后列数:", len(merged_df.columns))
print("合并后列名:", merged_df.columns.tolist())

这时候应该就是3列,且顺序和原DF一致啦!

内容的提问来源于stack exchange,提问作者Ted Callow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:17