熊猫数据帧索引 datetime.date 转换为对象 KeyError

Dan*_*iel 5 mysql date dataframe pandas keyerror

我从我的 MySQL 数据库中检索了一些数据。该数据在一列中包含日期(不是日期时间),在其他列中包含一些其他随机数据。假设dtf是我的数据框。还没有索引所以我设置了一个

    dtf.set_index('date', inplace=True)
Run Code Online (Sandbox Code Playgroud)

现在我想从特定日期获取数据,所以我写例如

    dtf.loc['2000-01-03']
Run Code Online (Sandbox Code Playgroud)

要不就

    dtf['2000-01-03']
Run Code Online (Sandbox Code Playgroud)

这给了我一个KeyError

    KeyError: '2000-01-03'
Run Code Online (Sandbox Code Playgroud)

但我知道它在那里。dtf.head()给我看。
所以我确实查看了第一行的索引类型:

    type(dtf.index[0])
Run Code Online (Sandbox Code Playgroud)

它告诉我:datetime.date. 一切都很好,现在如果我只是输入会发生什么

    dtf.index

    Index([2000-01-03, 2000-01-04, 2000-01-05, 2000-01-06, 2000-01-07, 2000-01-10,
    2000-01-11, 2000-01-12, 2000-01-13, 2000-01-14,
    ...
    2015-09-09, 2015-09-10, 2015-09-11, 2015-09-14, 2015-09-15, 2015-09-16,
    2015-09-17, 2015-09-18, 2015-09-21, 2015-09-22],
    dtype='object', name='date', length=2763)
Run Code Online (Sandbox Code Playgroud)

我对dtype='object'. 这不应该读datetime.date吗?

如果我在我的 mysql 表中使用 datetime 而不是 date 一切都像魅力一样。这是错误还是功能?我真的很想使用,datetime.date因为它最好地描述了我的数据。

我的熊猫版本是 0.17.0
我使用的是 python 3.5.0
我的操作系统是 arch linux

And*_*den 6

您应该使用 datetime64/Timestamp 而不是 datetime.datetime:

dtf.index = pd.to_datetime(dtf.index)
Run Code Online (Sandbox Code Playgroud)

意味着你有一个 DatetimeIndex 并且可以做一些漂亮的事情,比如通过字符串 loc 。

dtf.loc['2000-01-03']
Run Code Online (Sandbox Code Playgroud)

您将无法使用 datetime.datetime 来做到这一点。