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

Posted

技术标签:

【中文标题】熊猫数据框索引 datetime.date 转换为对象 KeyError【英文标题】:pandas dataframe index datetime.date converts to object KeyError 【发布时间】:2016-01-20 23:11:18 【问题描述】:

我从我的 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)

我对@9​​87654331@ 有点困惑。这不应该是datetime.date吗?

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

另外,请注意 numpy 仅对少数 dtypes 有特殊支持,而不是对每种类型的对象都支持。通常,将它们打包为该数据类型的 C 数组会更有效,而不是使用 object dtype,其中它是指向 python 对象的指针的 C 数组(总是会更慢)。 感谢您的回答,但使用 datetime.datetime 效果非常好,我可以执行您告诉我我做不到的查询。此外,我对 datetime.datetime 没有问题,但对 datetime.DATE 没有问题。我尝试了您的解决方案,但没有任何改变。我得到相同的 KeyError :( 还有其他想法吗?

以上是关于熊猫数据框索引 datetime.date 转换为对象 KeyError的主要内容,如果未能解决你的问题,请参考以下文章

将索引熊猫矩阵转换为平面数据框

如何将多索引列转换为熊猫数据框的单索引列?

列表中的熊猫数据框,分别指定标题[重复]

ValueError 将多索引熊猫数据框转换为 Excel

熊猫 groupby 没有将按列分组转换为索引

如何使用索引属性转换时间序列熊猫数据框?