python - b.sum() 产生 0 而 b.rolling(2).sum() 产生 nan,其中 b=pd.Series([np.nan, np.nan])
问题描述
pandas.sum()
默认情况下会跳过 NaN,因此我希望b.rolling(2).sum()
也将 NaN 替换为 0。但是,b.rolling(2).sum()
产生 NaN 而不是 0,其中b = pd.Series([np.nan, np.nan])
.
解决方案
DataFrame.rolling方法带有一个参数min_periods
,默认为窗口的大小。在积累了许多非缺失值之前,滚动计算将留下缺失值。您的所有值都丢失了,因此计算永远不会累积 2 个值。
对于这种全 NaN 情况,您只需将参数设置为 0。
pd.Series([np.NaN, np.NaN]).rolling(2, min_periods=0).sum()
# 0 0.0
# 1 0.0
但这也会改变存在前两个值的系列的行为。它将保留第一个值,而不是空的表示滚动总和中还没有 2 个值。
pd.Series([1, 2]).rolling(2).sum()
# 0 NaN
# 1 3.0
pd.Series([1, 2]).rolling(2, min_periods=0).sum()
# 0 1.0
# 1 3.0
为避免这种情况,我需要更多地了解您的用例。
推荐阅读
- angular - 在 NodeJs 上部署 Angular 7 应用程序时出现 OpenShift CrashLoopBackOff 错误
- python - Ansible:从字典中删除一个项目
- webpack - 如何在带有 webpack 的文件加载器中使用排除选项?
- bash - 为什么要在复制/粘贴到终端之前运行 cat|bash ?
- python - Splunk 使用 Python SDK 将 GCP 中的 csv 加载到 KVStore 查找中
- react-native - React Native datetimepicker 问题。在这段代码中为什么 Platform.OS==='ios'?true:false?
- google-apps-script - 用于复制和粘贴新的谷歌表单回复的脚本
- python - GNU Radio Companion——在流程图关闭之前记录一条消息
- matlab - 如何在 MATLAB 中制作 3 维数组的曲面图?
- angular - NgRx - 在 ngOnInit 中多次分派操作