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

Pandas合并第三个DataFrame时URN键值匹配失败问题求助

Pandas合并DataFrame时URN字段匹配失败的解决方法

问题核心不是URN为object类型导致的,而是float类型的URN转字符串时会保留.0后缀,和int转字符串的URN格式不匹配。比如schools1的URN是整数1234,转str后是"1234";而schools3的URN是float1234.0,直接转str后是"1234.0",两者字符串完全不同,自然无法匹配,导致左合并时schools3的数据全部丢失,外连接时数据被追加到底部。

解决步骤:

  • 统一所有URN的转换逻辑:先转成整数(去除小数部分)再转字符串,确保格式完全一致
    # 处理schools3的URN:先填充空值(避免转int报错),再转int、转str
    schools3['URN'] = schools3['URN'].fillna(0).astype(int).astype(str)
    # 统一schools1和schools2的URN格式
    schools1['URN'] = schools1['URN'].astype(int).astype(str)
    schools2['URN'] = schools2['URN'].astype(int).astype(str)
    
  • 验证格式一致性:转换后可以打印前几条数据确认字符串格式是否相同
    print("schools1的URN格式示例:", schools1['URN'].head().tolist())
    print("schools3的URN格式示例:", schools3['URN'].head().tolist())
    
  • 重新执行合并操作
    # 先合并schools1和schools2
    merge1 = schools1.merge(schools2, how='left', on='URN', suffixes=(None, '_y'))
    # 再合并上schools3
    schoolsCombined = merge1.merge(schools3, how='left', on='URN', suffixes=(None, '_y'))
    

特殊情况处理:

如果schools3中存在非整数的URN(如1234.5),先确认这些数据是否为有效编号:

  • 若为输入错误,修正为整数后再按上述方法处理
  • 若为合法带小数的编号,则需要将所有URN统一保留小数格式再转字符串,比如:
    schools1['URN'] = schools1['URN'].astype(float).astype(str)
    schools2['URN'] = schools2['URN'].astype(float).astype(str)
    schools3['URN'] = schools3['URN'].astype(str)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:43