Python 熊猫群居繁殖奇怪的类型转换行为
我是一个长期的R用户,试图转换到Python。。。这一切都很顺利,直到我在框架上执行Python 熊猫群居繁殖奇怪的类型转换行为,python,numpy,pandas,Python,Numpy,Pandas,我是一个长期的R用户,试图转换到Python。。。这一切都很顺利,直到我在框架上执行groupby功能时遇到了熊猫的一些奇怪的自动打字。我有一个熊猫数据帧,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
groupby
功能时遇到了熊猫的一些奇怪的自动打字。我有一个熊猫数据帧,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
这是最长日期的标题:
(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]')
array([ 9.72604800e+17, 8.88883200e+17, 9.71395200e+17, ...,
8.47065600e+17, 9.40809600e+17, 9.56016000e+17]))
这是minu 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]')
array([ 9.72604800e+17, 8.88883200e+17, 9.71395200e+17, ...,
8.47065600e+17, 9.40809600e+17, 9.56016000e+17]))
结果令人费解。。。max\u dates
数组由numpy.datetime64
类型组成,但min\u 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
函数仍然在传播这种奇怪的类型转换,但只适用于minu日期
数组。。。我能够执行我希望的减法,但我仍然想知道为什么熊猫(或Numpy?)会导致我的一个数组从datetime开始被强制转换为float64
编辑:
- 我的熊猫版本:0.16.2
- 我的numpy版本:1.9.2