我在Pandas中有一个数据框,其中包含日期和一些其他数据。日期明确地为datetime.date
类型。对于这个例子,我用手强迫它。在实际问题中,框架是从已经用这种方法设置的外部源中导入的。处理完索引后,我发现我的日期属于pandas._libs.tslib.Timestamp
类,这会导致与以后的代码不兼容。是什么原因导致类型/类的变化?
最小的工作示例(请注意第3行和第7行之间的区别):
In [1]: df = pd.DataFrame({'date' : ['02/20/2015','01/15/2016','08/21/2015'], 'i' : ['Bob', 'Bob', 'Jim'] ,'v' : [1, 2, 3]})
In [2]: df['date'] = pd.to_datetime(df.date).dt.date
In [3]: print type(df.date[0])
<type 'datetime.date'>
In [4]: df.set_index(['i','date'], inplace=True)
In [5]: print type(df.loc['Bob',:].index[0])
<class 'pandas._libs.tslib.Timestamp'>
In [6]: df.reset_index(inplace=True)
In [7]: print type(df.date[0])
<class 'pandas._libs.tslib.Timestamp'>
答案 0 :(得分:0)
我为此奋斗了几个小时,最后将问题追溯到多索引。在最初的情况下,很难发现,因为多索引操作出现在包括切片,部分索引等较大操作集的中间。但是最重要的是,日期类型在第4行进行了转换在上面的示例中,当设置了多索引时,此后它仍然属于Pandas类。
如果相反,我只是set_index('time')
,例如常规(非多)索引,没有类型转换。这也是跟踪原因的一个复杂因素,因为我将索引操作简化为调试的第一步,从而消除了我试图跟踪的问题。