我是一个长期的R用户试图转向Python ...它在我在我的框架上执行groupby
功能时遇到了Pandas的一些奇怪的自动类型转换。我有一个Pandas数据帧,df
,类似于以下内容:
id date numresp
0 1943 2002-11-08 1
1 1943 2002-11-08 1
2 1943 2003-02-17 1
3 1943 2003-02-17 1
4 1943 2003-02-17 1
我的目标是,对于每个唯一的id
,我想知道min
和max
日期,以便我可以计算以天为单位的时间增量。我目前正在使用pandas.groupby
来计算最大和最小日期的数组:
max_dates = df.groupby('id').date.max().values
min_dates = df.groupby('id').date.min().values
以下是max_dates
:
(array(['2009-08-19T19:00:00.000000000-0500',
'2010-11-11T18:00:00.000000000-0600',
'2009-03-22T19:00:00.000000000-0500', ...,
'2010-06-09T19:00:00.000000000-0500',
'2014-04-30T19:00:00.000000000-0500',
'2009-01-05T18:00:00.000000000-0600'], dtype='datetime64[ns]')
这是min_dates
的负责人:
array([ 9.72604800e+17, 8.88883200e+17, 9.71395200e+17, ...,
8.47065600e+17, 9.40809600e+17, 9.56016000e+17]))
结果令人费解...... max_dates
数组由numpy.datetime64
类型组成,但min_dates
数组由numpy.float64
类型组成:
>>> type(max_dates[0]), type(min_dates[0])
(numpy.datetime64, numpy.float64)
我知道 date
列是datetime64
类型:
>>>df.dtypes
id object
date datetime64[ns]
numresp int64
dtype: object
然而groupby
函数仍在传播这种奇怪的类型转换,但仅适用于min_dates
数组...我能够执行我希望的减法,但我' d还想知道为什么Pandas(或Numpy?)导致我的一个数组从datetime转换为float64?