代码之家  ›  专栏  ›  技术社区  ›  TTT2

Python-Pandas-如何将日期时间索引数据帧解析为时间戳

  •  0
  • TTT2  · 技术社区  · 4 年前

    我有一个带有日期时间索引的数据框,如下所示

    
    Datetimeindex price1 ($/kWh) price2 ($/kWh) price3 ($/kWh)  Price4 ($/kWh)  price 5 
                        
    2020-01-01  406.73  551.24  627.21  627.21  406.73
    2020-01-02  397.90  551.24  627.21  627.21  397.90
    2020-01-03  285.31  551.24  627.21  627.21  285.31
    2020-01-04  255.36  551.24  627.21  627.21  255.36
    2020-01-05  305.12  551.24  627.21  627.21  305.12
    ...     ...     ...     ...     ...     ...
    2021-09-30  141.72  665.00  810.47  810.47  141.72
    2021-10-01  123.73  691.41  841.26  841.26  123.73
    2021-10-02  122.95  691.41  841.26  841.26  122.95
    2021-10-03  113.81  691.41  841.26  841.26  113.81
    

    我想将数据帧作为

    df['2020-01-01'] 
    

    并得到错误:

    KeyError: '2020-01-01'
    

    KeyError: datetime.datetime(2020, 1, 1, 0, 0)
    

    我在网上搜索了一下,得出的结论是问题出在datetime索引类型上,所以我需要将其解析为timestamp-native-Date格式,但我无法完成。是否直接将索引解析为时间戳?

    编辑:

    这是索引的类型

    <bound method DatetimeIndex.to_series of DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
                   '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
                   '2020-01-09', '2020-01-10',
                   ...
                   '2021-09-25', '2021-09-26', '2021-09-27', '2021-09-28',
                   '2021-09-29', '2021-09-30', '2021-10-01', '2021-10-02',
                   '2021-10-03', '2021-10-04'],
                  dtype='datetime64[ns]', name='Fecha', length=643, freq=None)>
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   SeaBean    4 年前

    请注意,订阅格式为的日期字符串 df[string] 已经 deprecated since Pandas 1.2.0 :

    作为df[string](给定对行或行进行索引的模糊性) 选择一列),改为使用df.loc[string](GH36179)

    另见 GH36179

    要使用日期字符串为DatetimeIndex下标,现在我们必须使用 .loc ,详情如下:

    df.loc['2020-01-01'] 
    

    price1 ($/kWh)    406.73
    price2 ($/kWh)    551.24
    price3 ($/kWh)    627.21
    Price4 ($/kWh)    627.21
    price 5           406.73
    Name: 2020-01-01 00:00:00, dtype: float64
    

    df.loc['2020-01']      # for date range within a month
    

    结果:

                price1 ($/kWh)  price2 ($/kWh)  price3 ($/kWh)  Price4 ($/kWh)  price 5
    2020-01-01          406.73          551.24          627.21          627.21   406.73
    2020-01-02          397.90          551.24          627.21          627.21   397.90
    2020-01-03          285.31          551.24          627.21          627.21   285.31
    2020-01-04          255.36          551.24          627.21          627.21   255.36
    2020-01-05          305.12          551.24          627.21          627.21   305.12
    

    或者使用一系列月份:

    df.loc['2021-09':'2021-10']
    

    结果:

                price1 ($/kWh)  price2 ($/kWh)  price3 ($/kWh)  Price4 ($/kWh)  price 5
    2021-09-30          141.72          665.00          810.47          810.47   141.72
    2021-10-01          123.73          691.41          841.26          841.26   123.73
    2021-10-02          122.95          691.41          841.26          841.26   122.95
    2021-10-03          113.81          691.41          841.26          841.26   113.81
    

    您也可以只指定年份:

    df.loc['2021']
    

    结果:

    价格1($/kWh)价格2($/kWh)价格3($/kWh)价格4($/kWh)价格5
    2021-09-30          141.72          665.00          810.47          810.47   141.72
    2021-10-02          122.95          691.41          841.26          841.26   122.95
    

    还支持各种格式的日期字符串:

    df.loc['20200102': '20200104']          # YYYYmmdd
    

                price1 ($/kWh)  price2 ($/kWh)  price3 ($/kWh)  Price4 ($/kWh)  price 5
    2020-01-02          397.90          551.24          627.21          627.21   397.90
    2020-01-03          285.31          551.24          627.21          627.21   285.31
    2020-01-04          255.36          551.24          627.21          627.21   255.36
    
    df.loc['09/30/2021': '10/02/2021']      # mm/dd/YYYY
    

    结果:

                price1 ($/kWh)  price2 ($/kWh)  price3 ($/kWh)  Price4 ($/kWh)  price 5
    2021-09-30          141.72          665.00          810.47          810.47   141.72
    2021-10-01          123.73          691.41          841.26          841.26   123.73
    2021-10-02          122.95          691.41          841.26          841.26   122.95
    
        2
  •  1
  •   Devyl    4 年前

    您正试图捕获带有df['2020-01-01']的列,如果要筛选索引,请对整个df使用df.index.filter或df[df.index.isin(date)]