【问题标题】:rolling function in python ignoring nanspython中的滚动函数忽略nans
【发布时间】:2018-09-11 02:48:05
【问题描述】:

https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.rolling_quantile.html

我看不出如何最好地忽略滚动百分位数函数中的 NaN。有人会知道吗?

seriestest = pd.Series([1, 5, 7, 2, 4, 6, 9, 3, 8, 10])

并插入nans

seriestest2 = pd.Series([1, 5, np.NaN, 2, 4, np.nan, 9, 3, 8, 10])

现在,在第一个系列中,我得到了预期的输出,使用:

seriestest.rolling(window = 3).quantile(.5)

但是,我希望做同样的事情并忽略 test2 系列中的 NaN。

seriestest2.rolling(window = 3).quantile(.5)

给予:

0    NaN
1    NaN
2    NaN
3    NaN
4    NaN
5    NaN
6    NaN
7    NaN
8    8.0
9    8.0
dtype: float64

但我认为如果我们可以解析 skipna=True,它会给出类似的结果,这对我不起作用:

0    NaN
1    NaN
2    5.0
3    2.0
4    4.0
5    4.0
6    4.0
7    3.0
8    8.0
9    8.0
dtype: float64

【问题讨论】:

  • 当窗口中有NaN 时,您期望什么功能?
  • 我不认为你的分位数计算是正确的
  • @Prune 我希望忽略 NaN 并假装它不存在,即在该窗口期间处理所有整数
  • “假装它不存在”有多种形式。例如,当您到达第一个完整窗口 (1, 5, NaN) 时,您是只想要可见的两个值,还是要填充下一个可用值 2?
  • 啊,对不起,我只希望它是可见的 2 个值

标签: python pandas


【解决方案1】:

问题在于,拥有nan 值会在滚动窗口中为您提供少于所需数量的元素 (3)。您可以通过设置min_periods 参数将rolling 的有效观测值的最小数量定义为更少。

seriestest2.rolling(window=3, min_periods=1).quantile(.5)

或者,如果您只是想将 nan 值替换为 0,您可以使用 fillna

seriestest2.fillna(value=0).rolling(window=3).quantile(.5)

【讨论】:

  • 不过,这与 OP 期望的值不匹配,因此 OP 可能有其他想法。
  • 不幸的是,我不清楚这些数字是如何获得的。然而,这似乎符合预期的描述。
  • 谢谢@busybear。我会试一试.. 我想你已经解决了我想要描述的问题
猜你喜欢
  • 2012-12-20
  • 2018-08-21
  • 2013-04-18
  • 2020-12-14
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
相关资源
最近更新 更多