我相当确定我知道为什么在合并2个DFs后我会在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”给出了“DF2”列中的“nan”值。感谢您的想法如何合并这两个DFs。
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‘值。
发布于 2021-11-22 18:39:39
首先,您应该使用df.dropna()删除NaN值。当您删除NaN值时,这些索引可能没有按正确的顺序排列。
因此运行df.reindex(axis = 0)
https://stackoverflow.com/questions/70047519
复制相似问题