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

pandas concat正确实现:多CSV拼接后列重复列数翻倍问题求解

两个DataFrame拼接后列数翻倍,本质是pandas识别到两个表的列名不完全匹配,即使肉眼看列名一致,大概率存在不可见的格式差异或者类型差异。

排查步骤

  • 首先验证列名是否真的完全一致,执行代码:
    print(data_1.columns.equals(data_2.columns))
    如果返回False就可以确认是列名不匹配的问题。

常见问题和修复方案

  • 列名存在前后空白字符(空格、制表符、换行符等)
    执行以下代码清洗两个表的列名,去除首尾空白:
data_1.columns = data_1.columns.str.strip()
data_2.columns = data_2.columns.str.strip()
  • 列名存在大小写差异
    统一将列名转成全小写/全大写:
data_1.columns = data_1.columns.str.lower()
data_2.columns = data_2.columns.str.lower()
  • 列名数据类型不一致
    比如某列名在第一个表是整数1,第二个表是字符串'1',看起来一致但pandas会判定为不同列,统一转成字符串类型即可:
data_1.columns = data_1.columns.astype(str)
data_2.columns = data_2.columns.astype(str)
  • 读取CSV时参数不统一
    如果其中一个表读取时设置了index_col=0把第一列设为索引,另一个没有,也会导致列数量和列名不匹配,检查两个CSV的读取代码,保持参数一致即可。
  • 如果你确认两个表的列顺序完全一致,可以直接强制对齐列名:
    data_2.columns = data_1.columns

完整示例代码

import pandas as pd

# 统一列名清洗函数
def clean_df_columns(df):
    df.columns = df.columns.astype(str).str.strip().str.lower()
    return df

# 清洗两个数据表
data_1 = clean_df_columns(data_1)
data_2 = clean_df_columns(data_2)

# 执行拼接,ignore_index=True自动重置行索引
concat_result = pd.concat([data_1, data_2], axis=0, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03