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

Pandas Inner Join未返回预期完整结果,求助排查问题原因

问题排查与修复

1. 多余且错误的列赋值操作

代码中这一行完全没必要,还会导致数据错乱:

dfs['Stock']=df['StockNumber']

这行把df的StockNumber列直接赋值给dfs的新列Stock,如果两个DataFrame行数不一致,会出现值错位或NaN,直接删掉这行。

2. 合并类型默认是内连接

pd.merge()默认使用内连接(inner join),只会保留两个DataFrame中StockNumber完全匹配的行。如果你的预期140条是其中一个DataFrame的总行数,需要指定合并类型:

  • 要保留dfs的所有行(即使df里没有匹配项),用左连接:
    sf=pd.merge(dfs,df,on='StockNumber', how='left')
    
  • 要保留两边所有行,用外连接:
    sf=pd.merge(dfs,df,on='StockNumber', how='outer')
    

3. StockNumber格式不统一导致匹配失败

两边的StockNumber可能存在格式差异(比如空格、隐藏字符、符号残留等),需要统一清洗:

  • 对dfs的StockNumber也做格式处理:
    dfs['StockNumber'] = dfs['StockNumber'].astype(str).str.strip().str.replace(r'[-/]', '', regex=True)
    
  • 检查df里的StockNumber提取是否正确:比如URL最后8位是否真的是完整的库存编号?可以打印df['StockNumber'].unique()和dfs['StockNumber'].unique()对比,看哪些值没匹配上。

4. 额外检查点

  • 确保两个DataFrame的StockNumber列数据类型一致,最好都转为字符串类型,避免数字/字符串不匹配:
    df['StockNumber'] = df['StockNumber'].astype(str)
    dfs['StockNumber'] = dfs['StockNumber'].astype(str)
    
  • 检查是否有重复的StockNumber,重复值会导致合并后行数异常,可用df.duplicated('StockNumber').sum()查看重复数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:30:57