You need to enable JavaScript to run this app. 如何统一列名以使用pandas追加拼接多个DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

如何统一列名以使用pandas追加拼接多个DataFrame

实现代码

你可以通过以下代码实现需求,适配pandas所有主流版本:

import pandas as pd

# 原始DataFrame定义
df1 = pd.DataFrame({'person_id': [101,101,101,101,202,202,202],
                   'person_type':['A','A','B','C','D','B','A'],
                   'test_id':[1,2,3,3,4,4,5],
                   'login_date':['5/7/2013 09:27:00 AM','09/08/2013 11:21:00 AM','06/06/2014 08:00:00 AM','06/06/2014 05:00:00 AM','12/11/2011 10:00:00 AM','13/10/2012 12:00:00 AM','13/12/2012 11:45:00 AM']})

df2 = pd.DataFrame({'subject_id': [101,101,101,101,202,202,202],
                   'test_date':['5/7/2013 09:27:00 AM','09/08/2013 11:21:00 AM','06/06/2014 08:00:00 AM','06/06/2014 05:00:00 AM','12/11/2011 10:00:00 AM','13/10/2012 12:00:00 AM','13/12/2012 11:45:00 AM']})

# 1. 修改df2现有列的列名,匹配df1对应字段
df2.rename(columns={'subject_id':'person_id', 'test_date':'login_date'}, inplace=True)
# 2. 补充df1存在但df2缺失的字段,填充为空值
for col in df1.columns:
    if col not in df2.columns:
        df2[col] = pd.NA
# 3. 调整df2列顺序和df1完全一致
df2 = df2.reindex(columns=df1.columns)
# 4. 合并两个DataFrame,重置行号避免索引重复
final_df = pd.concat([df1, df2], ignore_index=True)

说明

  1. 你原有代码存在冗余操作:第一次rename已经完成了df2现有列的列名修改,第二次mapping映射属于重复操作,可以直接删除。
  2. 旧版本pandas的append方法已经在2.0+版本正式弃用,使用pd.concat兼容性更强。
  3. 用reindex调整列顺序比直接索引取值更安全,不会因为列名拼写错误抛出异常。

执行完成后final_df的结构完全符合预期:前7行是df1的原始数据,后7行是df2的数据,person_type和test_id两列为空值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:24:00