Jac*_*ott 5 python date time-series dataframe pandas
我在 pandas DataFrame 中有一些详细的时间序列数据,如下所示:
last returns
time
1990-01-02 09:47:00 21.80 NaN
1990-01-02 09:48:00 21.82 0.000917
1990-01-02 09:49:00 21.82 0.000000
1990-01-02 09:50:00 21.80 -0.000917
1990-01-02 09:51:00 21.86 0.002752
1990-01-02 09:52:00 21.87 0.000457
1990-01-02 09:53:00 21.82 -0.002286
1990-01-02 09:54:00 21.83 0.000458
1990-01-02 09:55:00 21.85 0.000916
... ... ...
Run Code Online (Sandbox Code Playgroud)
我想过滤它,只留下可被 5 整除的分钟数据,如下所示。为了得到这个,我使用了以下代码:
df.truncate(before='1990-01-02 09:50:00').asfreq('5T')
Run Code Online (Sandbox Code Playgroud)
last returns
time
1990-01-02 09:50:00 21.80 -0.000917
1990-01-02 09:55:00 21.85 0.000916
1990-01-02 10:00:00 21.79 -0.001375
1990-01-02 10:05:00 21.84 -0.000458
1990-01-02 10:10:00 21.91 0.000914
1990-01-02 10:15:00 21.88 0.000000
1990-01-02 10:20:00 21.87 -0.000457
1990-01-02 10:25:00 21.92 -0.000456
1990-01-02 10:30:00 21.93 0.000913
... ... ...
Run Code Online (Sandbox Code Playgroud)
这段代码显然不能很好地概括。pandas 中是否有功能可以让我获取通用 DataFrame 的 5 分钟数据?请注意,以下代码给出以下输出。它会查看第一个可用时间,并在该时间之后每 5 分钟提取一个条目。
df.asfreq('5T')
Run Code Online (Sandbox Code Playgroud)
last returns
time
1990-01-02 09:47:00 21.80 NaN
1990-01-02 09:52:00 21.87 0.000457
1990-01-02 09:57:00 21.85 0.000458
1990-01-02 10:02:00 21.84 0.001835
1990-01-02 10:07:00 21.85 -0.000914
1990-01-02 10:12:00 21.88 0.000915
1990-01-02 10:17:00 21.88 0.000915
1990-01-02 10:22:00 21.92 0.000913
1990-01-02 10:27:00 21.90 0.000914
... ... ...
Run Code Online (Sandbox Code Playgroud)
resample+asfreq只要频率能整除一天,或者能被一天整除:
分组的箱根据时间序列起点当天的开始进行调整。
df.resample('5T').asfreq()
last returns
time
1990-01-02 09:45:00 NaN NaN
1990-01-02 09:50:00 21.80 -0.000917
1990-01-02 09:55:00 21.85 0.000916
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用参数offsetif明确更改起点pandas >= '1.1.0'。
df.resample('5T', offset='2T').asfreq()
last returns
time
1990-01-02 09:47:00 21.80 NaN
1990-01-02 09:52:00 21.87 0.000457
Run Code Online (Sandbox Code Playgroud)