【发布时间】:2014-06-10 10:11:00
【问题描述】:
我在 pandas 中有一个系列 a:
>>> type(a)
<class 'pandas.core.series.Series'>
由datetime64[ns] 值组成:
>>> print a
0 2000-11-01
...
10 2000-11-04
11 2000-11-05
...
Name: date, dtype: datetime64[ns]
我想将其转换为描述日期的整数系列,而第一个值 (2000-11-01) 的索引应为 1。目前我正在使用:
b = (a-a.min()).astype('timedelta64[D]').astype(int)+1
所以我首先减去最小的 datetime64 (a-a.min()),得到一个 timedelta64[ns],我首先需要将其转换为天数 (timedelta64[D]),然后再转换为整数值。从timedelta64[ns] 到int 的直接转换是不可能的。
我想知道是否有更好的方法来做到这一点。 对于我当前包含超过 800k 行的系列对象,这已经需要 4secs Oo
编辑
该系列包含几个月的日期时间。具有作为连续日序列的结果整数值的示例数据。在这种情况下,2000-11-03 是最旧的日期,因此如上所述获得索引 1。日期时间 2000-11-05 不存在(应该是索引 3),但仍应分配 2000-11-06 4因为这是从2000-11-03开始的第四天:
2000-01-03 -> 1
2000-01-04 -> 2
2000-01-06 -> 4
...
2000-01-31 -> 29
2000-02-01 -> 30
2000-02-02 -> 31
2000-02-04 -> 33
...
【问题讨论】:
-
你每天都有一个条目吗?如果是这样,答案就变得微不足道:您的(整数)索引已经是您所寻求的......关于该系列的其他信息可能会提供有关可能技巧的想法
-
@FooBar:谢谢,我添加了示例数据和应该作为对话结果分配的值。我认为一天作为整数本身并不足以满足我想要做的事情。
-
什么版本的 pandas/numpy?
-
numpy 1.8.1、pandas 0.14、python 2.7.6(默认,2013 年 11 月 10 日,19:24:18)[MSC v.1500 32 位(英特尔)]
-
澄清一下:上面的解决方案工作正常,只是关心它的性能......
标签: python datetime pandas days