【问题标题】:Pandas merge 2 keys, second key return first raw correct second NanPandas 合并 2 个键,第二个键返回第一个原始正确的第二个 Nan
【发布时间】:2021-02-18 16:05:42
【问题描述】:

当合并 2 个数据集时,我在每个类别的第二个原始数据中得到 NAN。

这是一个用来说明问题的玩具数据集:

df1=pd.DataFrame({'Num':[1,1,2,3,3],
                  'date':['1995-09-01','1995-10-04','1995-11-07','1995-11-10','1995-11-25'],
                  'A':[42.5,40,38,40,28],
                  'B': [13.3,12.3,12.2,11,10]})

df2=pd.DataFrame({'Num':[1,1,1,1,2,2,3,3,3,3],
                  'date':['1995-09-01','1995-09-02','1995-10-03','1995-10-04','1995-10-05','1995-11-07','1995-11-08','1995-11-09','1995-11-10','1995-11-25'],
                  'C':[42.5,39.5,37.2,40,41,38,38.2,39.7,40,28],
                  'D': [13.3,12.8,12.1,12.3,13.3,12.2,12.4,12.8,11,10]})

运行以下代码后:

data = pd.merge(df1, df2,  how='left', left_on=['Num','date'], right_on = ['Num','date'])

这是我应该得到的(我用这个玩具数据集做的)

但是,使用我的真实数据集,我得到:

我检查了数据类型并且它们匹配,并且没有空值或 nans 出现在键上。 Num 格式为 int64,日期格式为 datetime64

【问题讨论】:

  • 在您的原始数据(不是玩具数据集)中,您能否检查匹配列(df1.dtypes 和 df2.dtypes)上的 dtypes 是否相同
  • @PaulBrennan 原始数据中的两个键具有相同的格式,int64 (num) 和 用于日期

标签: python pandas merge key


【解决方案1】:

如果您遇到上述问题的情况,这是我为解决这种情况所做的:

  • 检查两个数据帧上公共键匹配的 dtypes

如果问题仍然存在,请检查您愿意合并的列(键)的行。

就我而言,“num”键没问题。但是,与 df1 相比,“日期”键在 df2 中呈现不同的行。这说明在合并后,一些行将包含数据(在右侧),而另一些则不包含。

鉴于我选择的合并类型(how="left):

  • 合并数据框的结果形状正确。
  • 所有行都包含有关左侧数据帧 (df1) 的正确信息
  • 鉴于第一个和第二个数据帧中缺少匹配项(两个键之一),合并数据帧右侧的某些行将包含 NAN。

【讨论】:

    【解决方案2】:

    我会选择:

    df1.merge(df2, on=['Num','date'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2011-12-07
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多