熊猫数据框索引 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)
我对@987654331@ 有点困惑。这不应该是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的主要内容,如果未能解决你的问题,请参考以下文章