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

合并两个Pandas DataFrame后得到空DataFrame的原因分析

pd.merge()合并后得到Empty DataFrame的原因分析

问题描述

使用pd.merge()合并两个Pandas DataFrame后返回空DataFrame,代码及输出如下:

示例代码

import pandas as pd

df1 = pd.DataFrame({'HPI': [10, 20, 30, 40, 50],'INT': [1, 2, 3, 4, 5],'IND': [50, 60, 70, 80, 90]},index=[2001, 2002, 2003, 2004, 2005])

df2 = pd.DataFrame({'HPI': [11, 22, 33, 44, 55],'INT': [6, 7, 8, 9, 0],'IND': [51, 62, 73, 84, 95]},index=[2006, 2007, 2008, 2009, 2010])

merge = pd.merge(df1, df2,on=['HPI', 'INT', 'IND'])
print(merge)

输出结果

Empty DataFrame
Columns: [HPI, INT, IND]
Index: []

核心原因

  • 默认采用内连接逻辑:pd.merge()的默认连接方式是内连接(inner join),只有当指定的连接键(on参数中的列)在两个DataFrame中完全匹配的行才会被保留到结果里。
  • 连接键无匹配组合:你指定了['HPI', 'INT', 'IND']三个列作为合并的匹配依据,对比两个DataFrame的对应数据:
    • df1的HPI值为[10,20,30,40,50],df2的HPI值为[11,22,33,44,55],无重叠值;
    • df1的INT值为[1,2,3,4,5],df2的INT值为[6,7,8,9,0],无重叠值;
    • df1的IND值为[50,60,70,80,90],df2的IND值为[51,62,73,84,95],无重叠值。
      三个列的组合在两个DataFrame中没有任何一组完全匹配的行,因此内连接后没有符合条件的数据,返回空DataFrame。

可选解决方案

如果需要合并两个DataFrame,可根据需求调整合并逻辑:

  • 若要保留两个DataFrame的所有行,可使用外连接:pd.merge(df1, df2, on=['HPI', 'INT', 'IND'], how='outer');
  • 若想基于索引进行合并,可改用:pd.merge(df1, df2, left_index=True, right_index=True) 或 df1.join(df2)。

内容的提问来源于stack exchange,提问作者Nirmal kumar Rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:01:36