【问题标题】:select dataframe rows (datetimeindex) by a list of datetime.date通过 datetime.date 列表选择数据帧行(datetimeindex)
【发布时间】:2019-03-29 11:23:02
【问题描述】:

df 看起来像这样:

DateTime
2017-07-10 03:00:00    288.0
2017-07-10 04:00:00    306.0
2017-08-10 05:00:00    393.0
2017-08-10 06:00:00    522.0
2017-09-10 07:00:00    487.0
2017-09-10 08:00:00    523.0
2017-10-10 09:00:00    585.0

关于如何选择日期列表中的行的问题:

['2017-07-10', '2017-09-10']

拥有:

DateTime
2017-07-10 03:00:00    288.0
2017-07-10 04:00:00    306.0
2017-09-10 07:00:00    487.0
2017-09-10 08:00:00    523.0

谢谢

【问题讨论】:

    标签: python pandas datetime dataframe datetimeindex


    【解决方案1】:

    鉴于您列表中的日期最多包含每日信息,您可以先将 (Series.dt.floor) DatetimeIndex 设置为每日级别,然后使用 isin 使用日期时间对象列表进行索引:

    t = [pd.to_datetime('2017-07-10'), pd.to_datetime('2017-09-10')]
    df.index= pd.to_datetime(df.index)
    
    df[df.index.floor('d').isin(t)]
    

    输出

       DateTime
    2017-07-10 03:00:00     288.0
    2017-07-10 04:00:00     306.0
    2017-09-10 07:00:00     487.0
    2017-09-10 08:00:00     523.0
    

    【讨论】:

    • 例如?我们仍然可以使用日期访问器对吗?
    【解决方案2】:

    假设日期时间是索引,请尝试以下操作:

    to_search=['2017-07-10', '2017-09-10']
    df[df.index.to_series().dt.date.astype(str).isin(to_search)]
    

                            1
    DateTime                  
    2017-07-10 03:00:00  288.0
    2017-07-10 04:00:00  306.0
    2017-09-10 07:00:00  487.0
    2017-09-10 08:00:00  523.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2018-07-31
      • 2016-09-15
      • 2015-06-20
      • 1970-01-01
      相关资源
      最近更新 更多