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

Pandas pd.concat合并DataFrame生成两列,如何合并为单列?

问题解决:pd.concat生成两列而非单列的原因与修复

核心原因

你的代码里df1和df2的列名不一致(df1提取的是原CSV第4列的表头,df2是原CSV第0列的表头),pd.concat默认会按列名对齐合并,所以列名不同时会生成两列,各自的数据填充在对应列,空值补NaN。

修复方案

统一两个DataFrame的列名,让它们拥有相同的列名后再合并,就能得到单列结果。

修改后的完整代码

import pandas as pd

# 读取第一个文件,提取第4列,去重,统一列名
df1 = pd.read_csv('file.csv', header=0, usecols=[4]).drop_duplicates()
# 重命名列(不管原列名是什么,统一改成同一个名称)
df1 = df1.rename(columns={df1.columns[0]: 'target_col'})

# 检查点:保存中间文件
df1.to_csv('orders_new.csv', index=False, header=None, encoding='utf-8')

# 读取第二个文件,提取第0列,统一列名
df2 = pd.read_csv('file2.csv', header=0, usecols=[0])
df2 = df2.rename(columns={df2.columns[0]: 'target_col'})

# 检查点:保存中间文件
df2.to_csv('tables_new.csv', index=False, header=None, encoding='utf-8')

# 合并为单列,然后找出仅在其中一个DataFrame出现的值(去重时keep=False)
new_dataframe = pd.concat([df1, df2], ignore_index=True).drop_duplicates(keep=False)
new_dataframe.to_csv('output.csv', index=False, encoding='utf-8')

补充说明

  • 如果你不需要保留原列名,也可以在读取时直接指定列名,比如:
    # 读取时直接指定列名,跳过原表头(如果原文件有表头)
    df1 = pd.read_csv('file.csv', header=0, usecols=[4], names=['target_col'], skiprows=1).drop_duplicates()
    
    注意:skiprows=1会跳过原文件的第一行表头,如果你原文件的表头需要保留判断,建议用前面的重命名方式更稳妥。
  • drop_duplicates(keep=False)会保留那些只出现过一次的行,正好对应两个文件的差异数据,符合你对比差异的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:30:51