我在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.目前我正在使用:< / p>
b = (a-a.min()).astype('timedelta64[D]').astype(int)+1
所以我首先减去最小的datetime64(a-a.min()
),得到一个timedelta64[ns]
,我首先需要转换为几天(timedelta64[D]
)然后转换为整数值。无法从timedelta64[ns]
直接转换为int
。
我想知道是否有更好的方法。 对于我当前包含超过800k行的Series-object,这需要4secs Oo
该系列包含几个月的日期时间。将结果整数值作为连续日系列的示例数据。在这种情况下, 2000-11-03 是最早的日期,因此如上所述获得索引1。日期时间 2000-11-05 不存在(本来是索引3),但 2000-11-06 仍应分配 4 asit是从 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
...
答案 0 :(得分:5)
性能问题最近已修复here。这将是0.14.1(即将发布,Windows的发布二进制文件发布here,当前发布的内容略有过时,不包括此修复程序,请稍后再回来查看。)
FYI timedelta转换的文档为here
In [1]: s = Series(pd.date_range('20000101',periods=10000).tolist() * 80)
0.14.0
In [3]: %timeit (s-s.min()).astype('timedelta64[D]').astype(int)+1
1 loops, best of 3: 2.9 s per loop
0.14.1
In [12]: %timeit (s-s.min()).astype('timedelta64[D]').astype(int)+1
10 loops, best of 3: 24.7 ms per loop