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

求助:使用Pandas合并两个DataFrame后结果为空的问题

排查Pandas内连接结果为空的问题

我之前也碰到过类似的情况——明明两个表都有数据,连接字段类型也一致,但内连接结果却为空。大概率是数据本身的隐性差异导致的,咱们一步步来排查:

  • 先确认两个表的UPC值是否真的有交集
    别只依赖截图,用代码直接验证交集数量是最准确的:

    # 计算两个表UPC的交集数量
    common_upcs = set(MPA_COMMODITY['UPC']).intersection(set(MDM_LINK_VIEW['UPC']))
    print(f"两个表共有的UPC数量:{len(common_upcs)}")
    

    如果输出是0,那说明两个表的UPC值确实没有重叠,这时候得回头核对数据的来源和清洗过程。也可以直接打印出两个表UPC的前20个具体值对比:

    print("MPA_COMMODITY的前20个UPC值:", MPA_COMMODITY['UPC'].head(20).tolist())
    print("MDM_LINK_VIEW的前20个UPC值:", MDM_LINK_VIEW['UPC'].head(20).tolist())
    

    有时候截图可能存在显示截断,直接看数值列表能更清楚地发现差异。

  • 检查UPC列是否存在空值或异常值
    空值在内连接时会被自动排除,如果两个表的非空UPC完全没有重叠,结果也会是空。可以统计非空值数量:

    print(f"MPA_COMMODITY的UPC非空数量:{MPA_COMMODITY['UPC'].notna().sum()}")
    print(f"MDM_LINK_VIEW的UPC非空数量:{MDM_LINK_VIEW['UPC'].notna().sum()}")
    

    另外也可以检查是否存在异常值(比如超大数、负数等不符合业务逻辑的数值),这些都可能导致没有有效交集。

  • 确认merge调用的正确性
    虽然你写的merge(MPA_COMMODITY, MDM_LINK_VIEW, on='UPC')默认就是内连接,但建议明确指定how='inner'避免参数误解,同时确认是否正确导入了pandas的merge函数:

    import pandas as pd
    result = pd.merge(MPA_COMMODITY, MDM_LINK_VIEW, on='UPC', how='inner')
    
  • 强制统一数据类型再尝试
    有时候虽然显示都是int64,但可能存在隐性的类型差异(比如一个是int64,另一个是uint64),可以强制转换后再合并:

    MPA_COMMODITY['UPC'] = MPA_COMMODITY['UPC'].astype('int64')
    MDM_LINK_VIEW['UPC'] = MDM_LINK_VIEW['UPC'].astype('int64')
    result = pd.merge(MPA_COMMODITY, MDM_LINK_VIEW, on='UPC')
    

一般来说,最常见的原因还是两个表的UPC值没有实际交集,先从这一点入手排查,应该能找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:39:17