Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫滚窗;日期时间索引:“偏移量”是什么意思?_Python_Pandas_Datetime_Dataframe - Fatal编程技术网

Python 熊猫滚窗;日期时间索引:“偏移量”是什么意思?

Python 熊猫滚窗;日期时间索引:“偏移量”是什么意思?,python,pandas,datetime,dataframe,Python,Pandas,Datetime,Dataframe,pandas 0.22的滚动窗口函数采用window参数,如下所述: 窗口:int或offset 移动窗口的大小。这是用于分析的观察数 计算统计数据。每个窗口都是固定大小的 如果是偏移量,则这将是每个窗口的时间段。 每个窗口的大小将根据观察结果而变化 包括在时间段内。这仅对datetimelike有效 索引。这在0.19.0中是新的 在这种情况下,偏移量实际上是什么?简而言之,如果您使用像“2D”(2天)这样的偏移量,pandas将使用索引中的日期时间信息(如果可用),可能会解释任何缺失行或不规

pandas 0.22的滚动窗口函数采用
window
参数,如下所述:

窗口:int或offset

移动窗口的大小。这是用于分析的观察数 计算统计数据。每个窗口都是固定大小的

如果是偏移量,则这将是每个窗口的时间段。 每个窗口的大小将根据观察结果而变化 包括在时间段内。这仅对datetimelike有效 索引。这在0.19.0中是新的


在这种情况下,偏移量实际上是什么?

简而言之,如果您使用像“2D”(2天)这样的
偏移量,pandas将使用索引中的日期时间信息(如果可用),可能会解释任何缺失行或不规则频率。但是,如果使用简单的
int
如2,则pandas将把索引视为简单的整数索引[0,1,2,…],并忽略索引中的任何日期时间信息

一个简单的例子应该说明这一点:

df=pd.DataFrame({'x':range(4)}, 
    index=pd.to_datetime(['1-1-2018','1-2-2018','1-4-2018','1-5-2018']))

            x
2018-01-01  0
2018-01-02  1
2018-01-04  2
2018-01-05  3
请注意,(1)索引是日期时间,但(2)缺少“2018-01-03”。因此,如果使用2这样的纯整数,
rolling
将只查看最后两行,而不考虑日期时间值(从某种意义上讲,它的行为类似于
iloc[i-1:i]
,其中
i
是当前行):

相反,如果使用2天的偏移量(
'2D'
),
滚动
将使用实际的日期时间值,并解释日期时间索引中的任何异常情况

df.rolling('2D').count()

              x
2018-01-01  1.0
2018-01-02  2.0
2018-01-04  1.0
2018-01-05  2.0

还要注意的是,在使用日期偏移量时,需要将索引按升序排序,但在使用简单整数时,这并不重要(因为您只是忽略了索引)

为了给出以微秒为单位的偏移量(比如说10),将使用什么字符串?我尝试了“10f”,但没有work@Legolas这一信息出人意料地难以找到,尽管在这种情况下猜测通常很有效;-)我会使用“我们”,但“微秒”或“微秒”也可以。更多信息请参见此处:@JohnE That doc没有像示例中那样提到小写
d
,只提到
days
。但是只有
2d
似乎有效,而
2day
无效(?)@thakis感谢您的关注。我不太清楚为什么“天”在这里不起作用。在其他情况下,您可以通过这些其他方式指定天数的偏移量(例如,尝试
pd.Timedelta('2day')
),但我也不能在这里使用“天”。FWIW,我认为“D”可能是这里指定“天”的最标准或最规范的方式,因此我将上面的示例改为使用
2D
,而不是
2D
@thakis这可能有点傻,但如果出于某种原因,你真的想使用“天”,你可以这样做,通过显式转换为timedelta:
df.rolling(pd.timedelta('2day')).count()
df.rolling('2D').count()

              x
2018-01-01  1.0
2018-01-02  2.0
2018-01-04  1.0
2018-01-05  2.0