我从MySQL数据库中检索了一些数据。这些数据在一列中有日期(不是日期时间),在其他列中有一些其他随机数据。假设dtf
是我的 Dataframe 。还没有索引,所以我设置了一个索引
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
,那么一切都很顺利。这是一个bug还是一个特性?我真的很想使用datetime.date
,因为它最好地描述了我的数据。
我的Pandas版本是0.17.0
我使用的是python 3.5.0
我的操作系统是arch linux
2条答案
按热度按时间3htmauhk1#
您应该使用datetime 64/时间戳,而不是datetime。datetime:
这意味着你有一个DatetimeIndex,可以做一些漂亮的事情,比如通过字符串来锁定。
ohfgkhjo2#
使用
pd.to_datetime
将df.index
转换为dtypedatetime64
时,每个索引的类型实际上都变为类型datetime.datetime
。正如Andy Hayden所提到的,一旦将索引转换为
datetime64
,就可以按照OP的要求建立索引,例如此外,即使dtype是
datetime64
,空时间也不会呈现,所以从视觉上看,它们是完全相同的。也就是说,如果要使用
datetime.date
,仍然可以显式使用datetime.date
。例如,要选择2000-01-03
上的值,可以使用loc
或query
:如果你需要在日期之间选择一个日期范围,
query
非常方便(或者between
也可以):