pandas dataframe index datetime.date转换为对象KeyError

时间:2015-10-21 19:53:03

标签: mysql date pandas dataframe keyerror

我从MySQL数据库中检索一些数据。此数据在一列中具有日期(不是日期时间),在其他列中具有一些其他随机数据。我们说dtf是我的数据帧。还没有索引,所以我设置了一个

    dtf.set_index('date', inplace=True)

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

    dtf.loc['2000-01-03']

或只是

    dtf['2000-01-03']

这给了我一个KeyError

    KeyError: '2000-01-03'

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

    type(dtf.index[0])

它告诉我: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)

我对dtype='object'感到有点困惑。不应该阅读datetime.date吗?

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

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

1 个答案:

答案 0 :(得分:2)

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

dtf.index = pd.to_datetime(dtf.index)

意味着你有一个DatetimeIndex,可以做一些很好的事情,比如loc by strings。

dtf.loc['2000-01-03']

您将无法使用datetime.datetime执行此操作。