gpt4 book ai didi

python - 如何使用 pandas 根据自定义间隔提取时间序列的子集?

转载 作者:行者123 更新时间:2023-11-28 22:44:22 24 4
gpt4 key购买 nike

我有一个一个月内每天 24 小时每一分钟的外汇价格数据集。然而,外汇市场仅在周日 17:00 至周五 16:00 实际开放,这些时间之间的数据只是用周五晚上的最后记录值填充。我正在尝试删除此填充,只留下市场开放数据。

我已经走了几十条死胡同,只见树木不见森林。

根据指定的时间范围返回数据的子集非常简单:

import pandas as pd
df = pd.read_csv(tickdatafile,index_col='dtime',parse_dates=True)

# Return all rows for times between 12:00 and 16:00
df = df.between_time('12:00','16:00')

前两行从 csv 文件创建数据框,分配 'dtime' 列作为索引并将其解析为日期时间对象。第三行返回 12:00 到 16:00 之间的所有行,不管今天是哪一天。

一个简单的单行解决方案看起来像(伪代码):

df = df.between_customTimeRange('Sun 17:00','Fri 16:00')

但显然,这是行不通的。

是否有一些简单的事情我完全忽略了?

编辑:我已将 EKomarov 和 Alexander 的回答合并到以下解决方案中:

import pandas as pd
df = pd.read_csv(tickdatafile,index_col='dtime',parse_dates=True)

mask = df[ ( ( df.index.weekday == 6 ) & ( df.index.hour < 17 ) )# Sunday pre 17:00
| ( df.index.weekday == 5 ) # All of Saturday
| ( ( df.index.weekday == 4 ) # Friday
& ( ( df.index.hour >= 16 ) # Friday 16.00 onwards
& ~( ( df.index.hour == 16 )
& ( df.index.minute == 0 )# Exclude 16.00 itself
)
)
)
]

df = df[~df.index.isin(mask.index)] # return all data not in mask
df.to_csv(tradingdaysonly)

最佳答案

我使用与@EKomarov 相同的方法,但处理时间的方式不同。 Stamps 是您的 pd.Timestamp 索引。首先创建您不想要的日期/时间的掩码,然后将其反转。请注意,dayofweek 的索引为 Monday=0 和 Sunday=6。

mask = stamps[((stamps.dayofweek == 6) & (stamps.hour < 17))  # Sunday before 17:00
| (stamps.dayofweek == 5) # All of Saturday
| ((stamps.dayofweek == 4) # Friday after 16:00
& (stamps.hour >= 16)
& ~((stamps.hour == 16) & (stamps.minute == 0)))] # Exclude 16:00

stamps[~stamps.isin(mask)]

关于python - 如何使用 pandas 根据自定义间隔提取时间序列的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com