【问题标题】:Pandas Merge Gives nan valuesPandas Merge 提供 nan 值
【发布时间】:2021-12-30 23:25:55
【问题描述】:

我相当确定我知道为什么在合并 2 个 DF 后我会在 DF2 中获得 nan 值,但我不明白如何解决这个问题。我的数据如下所示。 DF2 df 是一个非常大的 DF,其年、月和日可追溯到 1991 年。我正在尝试将此 DF2 的子集与 DF1 中更小的年/月/日子集匹配或合并。 = 2018。通常,“nan”值的这个问题是由于 df1、df2 中的列名不匹配或相似,但我的列在我看来是一样的。

DF1:

Out[2]: 
        plant_name  obsvals  year  month  day  hour
0  COPPER CROSSING      0.0  2018      1    1     2
1  COPPER CROSSING      0.0  2018      1    1     3
2  COPPER CROSSING      0.0  2018      1    1     4
3  COPPER CROSSING      0.0  2018      1    1     5
4  COPPER CROSSING      0.0  2018      1    1     6

我的第二个 df 看起来像这样: DF2:

             plant_name  business_name maint_region_name  modelvals     dataset  year  month  day  hour
245448  COPPER CROSSING  UNITED STATES           CENTRAL     3839.9  ERA5        2018      1    1     0
245449  COPPER CROSSING  UNITED STATES           CENTRAL        0.0  ERA5        2018      1    1     1
245450  COPPER CROSSING  UNITED STATES           CENTRAL        0.0  ERA5        2018      1    1     2
245451  COPPER CROSSING  UNITED STATES           CENTRAL        0.0  ERA5        2018      1    1     3
245452  COPPER CROSSING  UNITED STATES           CENTRAL        0.0  ERA5        2018      1    1     4

我合并这两个 DF 的想法是这样,但它使用 how ="inner" 和 how = "left" 为 'modelvals' 列中的 DF2 提供了 'nan' 值。感谢您提出如何合并这 2 个 DF 的想法。

DF3 = DF1.merge(DF2, on=["plant_name", "year", "month", "day", "hour"], how="inner")

输出如下所示:

fdf = DF3[(DF3['year'] == 2018) & (DF3['month'] == 1) & (DF3['day']==1) ]

         plant_name  obsvals  year  month  day  hour  business_name maint_region_name  modelvals     dataset
0   COPPER CROSSING      0.0  2018      1    1     2  UNITED STATES           CENTRAL        NaN  ERA5      
1   COPPER CROSSING      0.0  2018      1    1     3  UNITED STATES           CENTRAL        NaN  ERA5      
2   COPPER CROSSING      0.0  2018      1    1     4  UNITED STATES           CENTRAL        NaN  ERA5      
3   COPPER CROSSING      0.0  2018      1    1     5  UNITED STATES           CENTRAL        NaN  ERA5      
4   COPPER CROSSING      0.0  2018      1    1     6  UNITED STATES           CENTRAL        NaN  ERA5      

您可以在“modelvals”列中看到“nan”值。我在下面包含了两个熊猫的数据类型:

DF1:
plant_name     object
obsvals       float64
year            int64
month           int64
day             int64
hour            int64
dtype: object

DF2:
plant_name            object
business_name         object
maint_region_name     object
modelvals            float64
dataset               object
year                   int64
month                  int64
day                    int64
hour                   int64
dtype: object 

我正在合并 'plant_name','year','month','day','hour',它们看起来具有相同的数据类型。在代码的上一步中,我在上面显示的合并步骤之前从 DF1 df 中删除了“nan”值。

【问题讨论】:

  • 我无法重现该错误。 modelvals 的所有 3 行对我来说都是 0.0
  • 嗨 - 既然我已经发布了一些编辑,请您再看看吗?

标签: python pandas merge nan


【解决方案1】:

首先你应该使用 df.dropna() 删除 nan 值。 当你删除 nan 值时,索引可能没有正确的顺序。

所以运行 df.reindex(axis = 0)

【讨论】:

  • 您好,感谢您的回复。但是,我添加了您的建议,并且 df 'fdf' 中的 nan 问题仍然存在。
  • DF2 (modelvals) 中的列标题也存在问题。我重命名了此列,现在合并工作并且不返回“nan”值。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 2020-06-04
  • 2013-04-01
  • 2017-03-13
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多