代码之家  ›  专栏  ›  技术社区  ›  sds Niraj Rajbhandari

在时间戳索引中按日期时间查找不起作用

  •  1
  • sds Niraj Rajbhandari  · 技术社区  · 8 月前

    考虑一个日期索引的DataFrame:

    d0 = datetime.date(2024,5,5)
    d1 = datetime.date(2024,5,10)
    df0 = pd.DataFrame({"a":[1,2],"b":[10,None],"c":list("xy")}, index=[d0,d1])
    df0.index
    Index([2024-05-05, 2024-05-10], dtype='object')
    

    请注意 df0.index.dtype object . 现在,查找适用于 date :

    df0.loc[d0]
    a       1
    b    10.0
    c       x
    Name: 2024-05-05, dtype: object
    

    但两者都有 df0.loc[str(d0)] df0.loc[pd.Timestamp(d0)] 提升 KeyError . 这似乎是合理的。

    但是,请考虑

    df1 = df0.reindex(pd.date_range(d0,d1))
    df1.index
    DatetimeIndex(['2024-05-05', '2024-05-06', '2024-05-07', '2024-05-08',
                   '2024-05-09', '2024-05-10'],
                  dtype='datetime64[ns]', freq='D')
    

    请注意 df1.index.dtype datetime64 . 现在,查找适用于 二者都 df1.loc[pd.Timestamp(d0)] (如预期) df1.loc[str(d0)] ( 为什么? 但是 对于 df1.loc[d0] (如果它适用于字符串,为什么不呢 日期 ?!)

    这是预期的行为吗(a 程序错误 具有 任期 )? 这是故意的吗?

    1 回复  |  直到 8 月前
        1
  •  2
  •   Andrej Kesely    8 月前

    看看源代码,它是如何 机具 .loc 对于 DateTimeIndex :

    它的实施目的是:

    但是 不是 对于 datetime.date