Pandas群居繁殖奇怪的类型转换行为

2024-09-28 03:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个长期的R用户试图使转变到Python。。。这一切都很顺利,直到我在框架上执行groupby函数时遇到了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,我想知道minmax日期,这样我就可以计算出以天为单位的时间增量。我目前正在使用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数组。。。我能做我所希望的减法,但我仍然想知道为什么熊猫(或Numpy?)是否导致我的一个数组从datetime强制转换为float64?你知道吗

编辑:

  • 我的熊猫版本:0.16.2
  • 我的numpy版本:1.9.2

Tags: 函数numpyid类型dfdate数组min

热门问题