从numpy.timedelta64值提取天

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

当我从s2中减去s1

s3 = s2 – s1

我得到一个types为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中提取天数,也许将它们保留为整数(对小时/分钟等不感兴趣)?

在此先感谢您的帮助。

您可以将其转换为具有一天精度的timedelta。 要提取天的整数值,用一天的timedelta分隔它。

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

或者像@PhillipCloudbuild议的那样,只是days.astype(int)因为timedelta只是一个64位的整数,根据你传入的第二个参数( 'D''ns' ,…)以各种方式解释。

你可以在这里find更多的信息。

使用dt.days获取整数的days属性。

例如:

 In [14]: s = pd.Series(pd.timedelta_range(start='1 days', end='12 days', freq='3000T')) In [15]: s Out[15]: 0 1 days 00:00:00 1 3 days 02:00:00 2 5 days 04:00:00 3 7 days 06:00:00 4 9 days 08:00:00 5 11 days 10:00:00 dtype: timedelta64[ns] In [16]: s.dt.days Out[16]: 0 1 1 3 2 5 3 7 4 9 5 11 dtype: int64 

更一般地说 – 您可以使用.components属性来访问timedelta的简化forms。

 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 

假设你有一个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+),然后从对象中提取date:

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

另一种方法是在几天内将该系列作为timedelta64投射,然后将其投射为int:

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