首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas合并提供NaN值

Pandas合并提供NaN值
EN

Stack Overflow用户
提问于 2021-11-20 15:53:04
回答 1查看 57关注 0票数 0

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

DF1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
             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”给出了“DF2”列中的“nan”值。感谢您的想法如何合并这两个DFs。

代码语言:javascript
复制
DF3 = DF1.merge(DF2, on=["plant_name", "year", "month", "day", "hour"], how="inner")

输出如下所示:

代码语言:javascript
复制
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’的值。我已经包含了下面这两个熊猫的数据类型:

代码语言:javascript
复制
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‘值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-22 18:39:39

首先,您应该使用df.dropna()删除NaN值。当您删除NaN值时,这些索引可能没有按正确的顺序排列。

因此运行df.reindex(axis = 0)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70047519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档