【问题标题】:Python - Pandas - How to subscript / slice / select a datetime index dataframe with date string (string format)Python - Pandas - 如何使用日期字符串(字符串格式)下标/切片/选择日期时间索引数据帧
【发布时间】:2021-11-28 18:09:26
【问题描述】:

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


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)

我在网上搜索并得出问题是日期时间索引类型的结论,因此我需要将其解析为时间戳原生 pandas 日期格式,但我无法完成。有没有办法直接将索引解析为时间戳?

编辑:

这是索引的类型

<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)>

【问题讨论】:

  • 我不确定我是否理解,你想要那个特定日期的所有值吗?你试过 df[df['Datetimeindex'] == '2020-01-01']?

标签: python pandas datetime timestamp


【解决方案1】:

您正在尝试使用 df['2020-01-01'] 捕获列,如果要过滤索引,请使用 df.index.filter 或 df[df.index.isin(date…)]整个df

【讨论】:

    【解决方案2】:

    注意,df[string] 格式的下标日期字符串一直是deprecated since Pandas 1.2.0

    不推荐使用单个类似日期时间的字符串来索引 DataFrame 行 作为 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']
    

    结果:

                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['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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2021-07-11
      相关资源
      最近更新 更多