从numpy.timedelta64值中提取天数

时间:2013-08-13 17:17:13

标签: python numpy pandas

我正在使用pandas / python,我有两个日期时间系列s1和s2,它们是在包含日期/时间的df字段上使用'to_datetime'函数生成的。

当我从s2中减去s1时

  

s3 = s2 - s1

我得到一个类型为

的系列s3
  

timedelta64 [NS]

0    385 days, 04:10:36
1     57 days, 22:54:00
2    642 days, 21:15:23
3    615 days, 00:55:44
4    160 days, 22:13:35
5    196 days, 23:06:49
6     23 days, 22:57:17
7      2 days, 22:17:31
8    622 days, 01:29:25
9     79 days, 20:15:14
10    23 days, 22:46:51
11   268 days, 19:23:04
12                  NaT
13                  NaT
14   583 days, 03:40:39

我如何看待该系列的1个元素:

  

S3 [10]

我得到这样的东西:

  

numpy.timedelta64(20692110亿, 'NS')

如何从s3中提取天数并将它们保持为整数(对小时/分钟等不太感兴趣)?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:105)

您可以将其转换为具有日精度的timedelta。要提取天数的整数值,请将其除以一天的时间值。

>>> x = np.timedelta64(2069211000000000, 'ns')
>>> days = x.astype('timedelta64[D]')
>>> days / np.timedelta64(1, 'D')
23

或者,正如@PhillipCloud建议的那样,只有days.astype(int),因为timedelta只是一个64位整数,它会以各种方式解释,具体取决于您传入的第二个参数('D',{ {1}},...)。

您可以找到更多相关信息here

答案 1 :(得分:24)

使用dt.days将days属性作为整数获取。

例如:

timedelta

更一般地说 - 您可以使用.components属性访问简化形式的In [17]: s.dt.components Out[17]: days hours minutes seconds milliseconds microseconds nanoseconds 0 1 0 0 0 0 0 0 1 3 2 0 0 0 0 0 2 5 4 0 0 0 0 0 3 7 6 0 0 0 0 0 4 9 8 0 0 0 0 0 5 11 10 0 0 0 0 0

hours

现在,要获取In [23]: s.dt.components.hours Out[23]: 0 0 1 2 2 4 3 6 4 8 5 10 Name: hours, dtype: int64 属性:

www.example.com/Partners/index.php/vendor

答案 2 :(得分:6)

假设你有一个timedelta系列:

import pandas as pd
from datetime import datetime
z = pd.DataFrame({'a':[datetime.strptime('20150101', '%Y%m%d')],'b':[datetime.strptime('20140601', '%Y%m%d')]})

td_series = (z['a'] - z['b'])

转换此timedelta列或系列的一种方法是将其转换为Timedelta对象(pandas 0.15.0+),然后从对象中提取日期:

td_series.astype(pd.Timedelta).apply(lambda l: l.days)

另一种方法是将系列转换为timedelta64(以天为单位),然后将其转换为int:

td_series.astype('timedelta64[D]').astype(int)