我尝试创建一个包含基于长度为5的窗口的滚动平均值的DataFrame
。但我的数据包含一个NaN
值,因此我只能获得具有NaN
值的第3列的NaN
值。在使用.rolling(5).mean()
时,如何可以忽略NaN
值
我有这个示例数据df1
Column1 Column2 Column3 Column4
0 1 5 -9.0 13
1 1 6 -10.0 15
2 3 7 -5.0 11
3 4 8 NaN 9
4 6 5 -2.0 8
5 2 8 0.0 10
6 3 8 -3.0 12
为方便起见:
#create DataFrame with NaN
df1 = pd.DataFrame({
'Column1':[1, 1, 3, 4, 6, 2, 3],
'Column2':[5, 6, 7, 8, 5, 8, 8],
'Column3':[-9, -10, -5, 'NaN', -2, 0, -3],
'Column4':[13, 15, 11, 9, 8, 10, 12]
})
df1 = df1.replace('NaN',np.nan)
df1
当我使用创建一个基于窗口5的滚动平均值时,对于第3列,我只得到了NaN
值。
df2 = df1.rolling(5).mean()
Column1 Column2 Column3 Column4
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 3.0 6.2 NaN 11.2
5 3.2 6.8 NaN 10.6
6 3.6 7.2 NaN 10.0
发布于 2021-11-30 14:39:13
Pandas mean有一个skipna
标志,告诉它忽略NaN,请参阅
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.mean.html
试一试
df2 = df1.rolling(5).mean(skipna=True)
或
df2 = df1.rolling(5).apply(pd.np.nanmean)
发布于 2021-11-30 14:48:49
应该使用0或NaN对均值进行插值。
下面的工作。
df1 = df1.fillna(df1.mean())
df2 = df1.rolling(5).mean()
https://stackoverflow.com/questions/70171072
复制相似问题