gpt4 book ai didi

python - Pandas 数据帧之间的计算返回 NaN

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:51 30 4
gpt4 key购买 nike

我有一个名为 df_mod 的 Pandas 数据框。此数据帧中一个有趣的变量称为 Evap_mod。当我使用命令 print(df_mod['Evap_mod']) 时,它返回:

2003-12-20 00:30:00    1.930664
2003-12-21 00:30:00 1.789290
2003-12-22 00:30:00 2.318347
2003-12-23 00:30:00 1.741943
2003-12-24 00:30:00 1.686124
2003-12-25 00:30:00 1.852876
2003-12-26 00:30:00 1.759650
2003-12-27 00:30:00 1.566521
2003-12-28 00:30:00 1.496039
2003-12-29 00:30:00 1.540751
2003-12-30 00:30:00 2.006475
2003-12-31 00:30:00 1.920912
Name: Evap_mod, Length: 729, dtype: float32

我有另一个名为 dff 的 pandas 数据框。此数据帧中一个有趣的变量称为 PET_PT。当我使用命令 print(dff['PET_PT']) 时,它返回:

2003-12-20    4.810697
2003-12-21 4.739378
2003-12-22 4.994467
2003-12-23 5.138086
2003-12-24 5.024226
2003-12-25 4.937206
2003-12-26 4.551416
2003-12-27 NaN
2003-12-28 NaN
2003-12-29 NaN
2003-12-30 NaN
2003-12-31 NaN
Freq: D, Name: PET_PT, Length: 729, dtype: float64

我想在这两个变量之间运行以下简单计算:

df_mod['ER_mod']=(df_mod['Evap_mod']+np.mean(ddf['PET_PT']))/(ddf['PET_PT']+np.mean(ddf['PET_PT']))

不幸的是,这个计算只返回 NaN:

2003-12-20 00:30:00   NaN
2003-12-21 00:30:00 NaN
2003-12-22 00:30:00 NaN
2003-12-23 00:30:00 NaN
2003-12-24 00:30:00 NaN
2003-12-25 00:30:00 NaN
2003-12-26 00:30:00 NaN
2003-12-27 00:30:00 NaN
2003-12-28 00:30:00 NaN
2003-12-29 00:30:00 NaN
2003-12-30 00:30:00 NaN
2003-12-31 00:30:00 NaN
Name: ER_mod, Length: 729, dtype: float64

有谁知道它为什么返回 NaN 以及如何解决这个问题?

最佳答案

原因是不同的索引值,所以在划分索引值后不匹配并创建了 NaN

解决方案是 map 系列 ddf['PET_PT']DatetimeIndex.normalize 创建的帮助列 date对于删除时间,还可以使用 pandas mean 的函数:

#same index values like df_mod
new = df_mod.assign(date = df_mod.index.normalize())['date'].map(ddf['PET_PT'])
print (new)
2003-12-20 00:30:00 4.810697
2003-12-21 00:30:00 4.739378
2003-12-22 00:30:00 4.994467
2003-12-23 00:30:00 5.138086
2003-12-24 00:30:00 5.024226
2003-12-25 00:30:00 4.937206
2003-12-26 00:30:00 4.551416
2003-12-27 00:30:00 NaN
2003-12-28 00:30:00 NaN
2003-12-29 00:30:00 NaN
2003-12-30 00:30:00 NaN
2003-12-31 00:30:00 NaN
Name: date, dtype: float64

df_mod['ER_mod']= df_mod['Evap_mod'] + ddf['PET_PT'].mean())/(new+ddf['PET_PT'].mean()
print (df_mod)
Evap_mod ER_mod
2003-12-20 00:30:00 1.930664 0.702960
2003-12-21 00:30:00 1.789290 0.693480
2003-12-22 00:30:00 2.318347 0.729125
2003-12-23 00:30:00 1.741943 0.661170
2003-12-24 00:30:00 1.686124 0.663134
2003-12-25 00:30:00 1.852876 0.685986
2003-12-26 00:30:00 1.759650 0.704152
2003-12-27 00:30:00 1.566521 NaN
2003-12-28 00:30:00 1.496039 NaN
2003-12-29 00:30:00 1.540751 NaN
2003-12-30 00:30:00 2.006475 NaN
2003-12-31 00:30:00 1.920912 NaN

如果 DataFrame 的长度相同,并且唯一的 inde 值差异是时间,则可以将一个索引重新分配给另一个索引:

ddf.index = df_mod.index

df_mod['ER_mod'] = (df_mod['Evap_mod'] + ddf['PET_PT'].mean())/\
(ddf['PET_PT'] + ddf['PET_PT'].mean())
print (df_mod)
Evap_mod ER_mod
2003-12-20 00:30:00 1.930664 0.702960
2003-12-21 00:30:00 1.789290 0.693480
2003-12-22 00:30:00 2.318347 0.729125
2003-12-23 00:30:00 1.741943 0.661170
2003-12-24 00:30:00 1.686124 0.663134
2003-12-25 00:30:00 1.852876 0.685986
2003-12-26 00:30:00 1.759650 0.704152
2003-12-27 00:30:00 1.566521 NaN
2003-12-28 00:30:00 1.496039 NaN
2003-12-29 00:30:00 1.540751 NaN
2003-12-30 00:30:00 2.006475 NaN
2003-12-31 00:30:00 1.920912 NaN

关于python - Pandas 数据帧之间的计算返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771621/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com