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

Pandas合并两个DataFrame多列关联仅Name列匹配、Age列失效

问题核心原因

当前输出出现8行冗余行、列错位的本质是两个数据集的连接键(Name + Age)没有任何一组值严格相等,导致外连接直接保留了左右两表的全部行,空值位置补NaN。你看到的列部分匹配的效果,是纯文本手动对齐导致的视觉偏差:实际逻辑上,来自df1的行只会有Gender/Phone的值,City/Country为NaN;来自df2的行只会有City/Country的值,Gender/Phone为NaN。

排查步骤
  • 第一步:清理列名隐形空格
    读入数据时如果来源是Excel/CSV,很容易出现列名前后带空格的问题,执行以下代码处理:
    df1.columns = df1.columns.str.strip()
    df2.columns = df2.columns.str.strip()
    
  • 第二步:统一连接键的类型与格式
    先通过df1.dtypes、df2.dtypes确认Name、Age列的类型是否一致(比如Age是否一个是整数int、一个是字符串object),再清理不可见字符:
    # 清理Name列前后空格
    df1['Name'] = df1['Name'].str.strip()
    df2['Name'] = df2['Name'].str.strip()
    # 统一Age列类型为整数
    df1['Age'] = df1['Age'].astype(int)
    df2['Age'] = df2['Age'].astype(int)
    
  • 第三步:验证匹配逻辑
    先执行内连接测试,确认连接键是否能正常匹配:
    test_merge = df1.merge(df2, on=['Name','Age'], how='inner')
    print(len(test_merge)) # 输出为0说明连接键仍有格式问题;输出为4则说明匹配正常
    

修正后的代码

你原来的merge逻辑里,因为两表非连接键没有重名列,不需要额外加suffixes和正则过滤,直接用on参数指定同名连接键即可:

df1 = df1.merge(df2, on=['Name','Age'], how='outer')

执行后会得到预期的4行结果,每行同时包含Name/Age/Gender/Phone/City/Country的全部值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 08:06:03