【问题标题】:Pandas: Select data between Sunday 23:00-Friday 23:00 (1 year span)Pandas:选择周日 23:00-周五 23:00 之间的数据(1 年跨度)
【发布时间】:2016-10-14 03:19:47
【问题描述】:

我有跨越整个 2015 年的以分钟为单位的欧元兑美元汇率时间序列,包括非交易日(例如周末),其中时间序列值在整个非交易期间重复。

我需要通过仅选择周日 23:00 pm 和周五 23:00 pm 之间的数据来丢弃这些时间段。

我还没有找到 Pandas 的解决方案(我知道如何在一天内的时间之间进行选择,并在几天之间进行选择)。我可以简单地将时间移动 1 小时,然后只选择工作日,但这是一个次优的解决方案。

知道如何实现这一目标吗?

数据示例:

Local time,              Open,    High,    Low,     Close,   Volume
02.01.2015 22:58:00.000, 1.20008, 1.20016, 1.20006, 1.20009, 119.84
02.01.2015 22:59:00.000, 1.20009, 1.20018, 1.20004, 1.20017, 40.61
02.01.2015 23:00:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
02.01.2015 23:01:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
...
04.01.2015 22:58:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
04.01.2015 22:59:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
04.01.2015 23:00:00.000, 1.19495, 1.19506, 1.19358, 1.19410, 109.4
04.01.2015 23:01:00.000, 1.19408, 1.19414, 1.19052, 1.19123, 108.12
...

【问题讨论】:

    标签: python datetime pandas time-series datetimeindex


    【解决方案1】:

    考虑pd.DataFramedfpd.tseries.index.DatetimeIndextidx

    tidx = pd.date_range('2010-01-01', '2011-01-01', freq='H')
    df = pd.DataFrame(np.ones((tidx.shape[0], 2)), tidx, columns=list('AB'))
    

    我们可以构造一系列要过滤的值

    day_hour = (((tidx.weekday + 1) % 7) * 100) + tidx.hour
    

    确定哪些值在星期五 23:00 之前

    before_friday = day_hour <= 523
    

    周日 23:00 之后

    after_sunday = day_hour >= 23
    

    根据上述条件过滤我们的df

    df[before_friday & after_sunday]
    

    【讨论】:

    • 感谢 piRSquared,这似乎是一个很好的解决方案,但它适用于每小时数据,所以我修改了以下内容:
    • tidx = pd.date_range('2015-01-01', '2016-01-01', freq='1min') before_friday = day_hour
    • 这适用于您的虚拟数组 df2 = pd.DataFrame(np.ones((tidx.shape[0], 2)), tidx, columns=list('AB')) 但在我的原始数组我有以下问题:“ValueError: Item wrong length 525601 instead of 525540.”
    • 为多个 cmets 道歉,但我仍然是 StackOverflow 新手(按下回车键转到下一行,而是发布了评论),它没有为我提供编辑按钮。
    • 老实说,我不介意多个 cmets。
    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2021-02-08
    • 2023-02-25
    • 2021-05-03
    相关资源
    最近更新 更多