【问题标题】:Pandas: "Left Join" not working correctly熊猫:“左加入”无法正常工作
【发布时间】:2017-10-24 13:27:46
【问题描述】:

我正在尝试将左连接应用于下面显示的两个数据框。

      outlier   day season
0      11556.0   0      1
==========================================
    date  bikeid       date2
0      1   16736  2016-06-06
1      1   16218  2016-06-13
2      1   15254  2016-06-20
3      1   16327  2016-06-27
4      1   17745  2016-07-04
5      1   16975  2016-07-11
6      1   17705  2016-07-18
7      1   16792  2016-07-25
8      1   18540  2016-08-01
9      1   17212  2016-08-08
10     1   11556  2016-08-15
11     1   17694  2016-08-22
12     1   14936  2016-08-29

outliers = pd.merge(outliers, sum_Day, how = 'left', left_on = ['outlier'], right_on = ['bikeid'])

outliers = outliers.dropna(axis=1, how='any')

  trip_outlier day season
0      11556.0   0      1

如上所示应用左连接后,我删除了所有 NaN 行,这给出了上面的结果。然而,期望的结果应该如下所示

  trip_outlier day season     date2
0      11556.0   0      1   2016-08-15

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    似乎outliersoutlier 列的dtype 是浮动的。在两个连接列中需要相同的 dtypes

    检查方式:

    print (outliers['outlier'].dtype)
    print (sum_Day['bikeid'].dtype)
    

    所以使用astype 进行转换:

    outliers['outlier'] = outliers['outlier'].astype(int)
    #if not int
    #sum_Day['bikeid'] = sum_Day['bikeid'].astype(int)
    

    编辑:

    如果outlier 列中的某些NaNs 无法转换为int,首先必须删除NaNs:

    outliers = outliers.dropna('outlier')
    outliers['outlier'] = outliers['outlier'].astype(int)
    

    【讨论】:

    • 谢谢!这是导致问题的数据类型。
    【解决方案2】:

    获得所需结果的一种方法是使用以下代码:

    outliers = outliers.merge(sum_Day.rename(columns={'bikeid': 'outlier'}), on = 'outlier', \
    how = 'left')
    

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 1970-01-01
      • 2021-11-21
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多