gpt4 book ai didi

python - Pandas Dataframe-从20年的历史数据中删除一天中的某些时间

转载 作者:行者123 更新时间:2023-12-03 16:54:52 43 4
gpt4 key购买 nike

我有一个证券的股市数据,可以追溯到20年前。数据当前位于Pandas DataFrame中,格式如下:

enter image description here

问题是,我不需要DataFrame中的任何“下类后”交易数据。该市场从上午9:30到下午4点(每个交易日的09:30到16:00)开放。我想删除不在此时间范围内的所有数据行。

我的本能是使用 Pandas 面具,如果我想在一天中的某些小时内使用该面具,我知道该怎么做:

mask = (df['date'] > '2015-07-06 09:30:0') & (df['date'] <= '2015-07-06 16:00:0')
sub = df.loc[mask]

但是,我不知道如何在20年的时间内每天使用某些数据来循环使用数据。

最佳答案

这里的问题是如何导入数据。没有指标是04:00是上午还是下午?但是根据您的评论,我们需要假设它是PM。但是输入将其显示为AM。

为了解决这个问题,我们需要在OR子句中包含两个条件。

  • 9:30-11:59
  • 0:00-4:00

  • 输入:
    df = pd.DataFrame({'date':   {880551: '2015-07-06 04:00:00', 880552: '2015-07-06 04:02:00',880553: '2015-07-06 04:03:00', 880554: '2015-07-06 04:04:00', 880555: '2015-07-06 04:05:00'},
    'open': {880551: 125.00, 880552: 125.36,880553: 125.34, 880554: 125.08, 880555: 125.12},
    'high': {880551: 125.00, 880552: 125.36,880553: 125.34, 880554: 125.11, 880555: 125.12},
    'low': {880551: 125.00, 880552: 125.32,880553: 125.21, 880554: 125.05, 880555: 125.12},
    'close': {880551: 125.00, 880552: 125.32,880553: 125.21, 880554: 125.05, 880555: 125.12},
    'volume': {880551: 141, 880552: 200,880553: 750, 880554: 17451, 880555: 1000},
    },
    )


    df.head()

    date open high low close volume
    880551 2015-07-06 04:00:00 125.00 125.00 125.00 125.00 141
    880552 2015-07-06 04:02:00 125.36 125.36 125.32 125.32 200
    880553 2015-07-06 04:03:00 125.34 125.34 125.21 125.21 750
    880554 2015-07-06 04:04:00 125.08 125.11 125.05 125.05 17451
    880555 2015-07-06 04:05:00 125.12 125.12 125.12 125.12 1000

    from datetime import time

    start_first = time(9, 30)
    end_first = time(11, 59)
    start_second = time(0, 00)
    end_second = time(4,00)
    df['date'] = pd.to_datetime(df['date'])
    df= df[(df['date'].dt.time.between(start_first, end_first)) | (df['date'].dt.time.between(start_second, end_second))]
    df
    date open high low close volume
    880551 2015-07-06 04:00:00 125.0 125.0 125.0 125.0 141

    以上不是很好的做法,我强烈不鼓励使用这种歧义数据。长期的解决方案是使用am/pm正确填充数据。

    如果数据格式正确,我们可以通过两种方式实现:

    1)使用日期时间
    from datetime import time

    start = time(9, 30)
    end = time(16)
    df['date'] = pd.to_datetime(df['date'])
    df= df[df['date'].dt.time.between(start, end)]

    2)在时间之间使用,仅与日期时间索引配合使用
    df['date'] = pd.to_datetime(df['date'])

    df = (df.set_index('date')
    .between_time('09:30', '16:00')
    .reset_index())

    如果仍然遇到错误,请使用逐行方法和确切错误来编辑您的问题。

    关于python - Pandas Dataframe-从20年的历史数据中删除一天中的某些时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60895196/

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