按天筛选Pandas数据帧

2024-05-15 14:48:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,其中包含按分钟计算的外汇数据,长达一年(371635行):

                           O        H        L        C
0                                                      
2017-01-02 02:00:00  1.05155  1.05197  1.05155  1.05190
2017-01-02 02:01:00  1.05209  1.05209  1.05177  1.05179
2017-01-02 02:02:00  1.05177  1.05198  1.05177  1.05178
2017-01-02 02:03:00  1.05188  1.05200  1.05188  1.05200
2017-01-02 02:04:00  1.05196  1.05204  1.05196  1.05203

我想过滤每日数据以获得小时范围:

^{pr2}$

如果我用200天做一个for循环,则需要几分钟。我怀疑这条线每走一步

df_day = df1[df.index.date == dt.date()] 

正在寻找与数据集中每一行的相等性(即使它是一个有序的数据集)。

有什么方法可以加快筛选速度,还是应该从一月到十二月执行一些旧的命令for循环。。。?在


Tags: 数据方法pandasdffordateindexdt
1条回答
网友
1楼 · 发布于 2024-05-15 14:48:33

避免使用Pythondatetime

首先,您应该避免将Pythondatetime与Pandas操作相结合。有许多Pandas/numy友好的方法来创建datetime对象以进行比较,例如pd.Timestamp和{}。此处的性能问题部分是由于docs中描述的这种行为造成的:

pd.Series.dt.date returns an array of python datetime.date objects

以这种方式使用objectdtype消除了向量化的好处,因为操作需要Python级别的循环。在

使用groupby操作按日期聚合

熊猫已经具有通过标准化时间按日期分组的功能:

for day, df_day in df.groupby(df.index.floor('d')):
    df_day_t = df_day.between_time('08:30', '09:30')
    # do something

另一个例子是,您可以通过以下方式访问特定日期的切片:

^{pr2}$

相关问题 更多 >