栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pandas.DataFrame.rolling的参数介绍,以及df.rolling中参数closed = “neither”的bug

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pandas.DataFrame.rolling的参数介绍,以及df.rolling中参数closed = “neither”的bug

 1、函数用处:

可以对series或者对dataframe进行窗口滚动计算

#官方文档参数
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, 
axis=0, closed=None, method='single')
2、部分参数:

window:移动窗口的大小

min_periods:窗口中要求具有值的最小观察次数; 否则,result 为 np.nan。当前面window的类型为整数时,min_period 将默认为窗口的大小,即window的大小

center:

如果为 False,则将窗口标签设置为窗口索引的右边缘。

如果为 True,则将窗口标签设置为窗口索引的中心。

axis:

如果是0或‘ index’,则在行间滚动

如果是1或者‘ columns’,滚过这些列

closed:

='right',则计算中将排除滚动窗口中的第一个点。

='left',则滚动窗口中的最后一个点将被排除在计算之外。

='both',则滚动窗口中的无点将被排除在计算之外。

='neither',则滚动窗口中的第一点和最后一点将被排除在计算之外。

默认为'right'

3、BUG:window=n,当设置closed=“neither”时,按道理应该是对n-1的窗口大小进行相关运算,但是从下面测试结果来看,此时滚动的窗口大小为nan
df = pd.DataFrame(data = range(10))
df.rolling(5, closed='neither').apply(lambda x:len(x))

运行的结果如下

4、BUG解决办法

 在GitHub上找到了pandas库的作者们给的回答

 简而言之就是,当close='neither'时,min_periods不等于n-1(n为窗口大小),而是等于n,作为滚动计算的对象窗口里,却至多只剩n-1个值,达不到min_periods的最小窗口值 数(n)的要求,所以:

 

输出就都是nan了

解决办法就是:手动设置min_periods=n-1

补充:当close="left", "right", "both"时,min_periods 仍然等于n,但作为滚动计算的对象窗口里,分别至多剩 n/n/n+1 个值,可以有数据窗口达到min_periods的最小窗口值 数(n)的要求,有兴趣可以做个简单测试~

函数官方文档:pandas.DataFrame.rolling — pandas 1.4.2 documentation

GitHub作者回答:BUG: Setting closed='neither' for rolling function of Series leads to mean() producing nan values · Issue #39038 · pandas-dev/pandas · GitHub

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号