[英]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.