簡體   English   中英

Pandas 合並給出 nan 值

[英]Pandas Merge Gives nan values

我相當確定我知道為什么在合並 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")

output 看起來像這樣:

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”值。 我在下面包含了 pandas 的數據類型:

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”值。

首先,您應該使用 df.dropna() 刪除 nan 值。 當您刪除 nan 值時,索引可能沒有正確的順序。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM