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
相关产品推荐
相关产品推荐

