Pandas时间序列如何使用[start:end:step]格式按指定周期间隔切片取值
报错原因
你直接在切片的步长位置传W-WED字符串会报错,是因为Pandas的DatetimeIndex标签切片的步长参数默认只支持整数型的位置偏移,暂时不支持直接传入频率字符串作为步长。
正确实现方式
两种常用的简洁写法可以实现需求,效果和你原来生成指定范围周三索引再取值的结果完全一致:
方法1:先切片时间范围,再按周几筛选
Pandas中DatetimeIndex的weekday属性返回值对应周几:0=周一,1=周二,2=周三,依此类推,直接筛选等于2的行即可:
import pandas as pd import numpy as np # 你的原始数据构造 indices = pd.date_range(start='feb 01 2020', end='nov 30 2020', freq='D') sr=pd.Series(index=indices, data=np.random.randn(indices.shape[0])) # 实现筛选 res = sr['2020-03-01':'2020-09-30'][sr.index.weekday == 2] print(res.head())
方法2:用asfreq直接指定频率取值
如果确认时间序列是连续无缺失的每日频率,可以先切片后调用asfreq方法直接取每周三的数据,写法更贴近你想要的频率参数逻辑:
res = sr['2020-03-01':'2020-09-30'].asfreq('W-WED') print(res.head())
两种方法的输出都和你之前的结果一致:
2020-03-04 -0.378698 2020-03-11 1.616860 2020-03-18 -0.738064 2020-03-25 0.375743 2020-04-01 -0.233976 Freq: W-WED, dtype: float64
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

