我正在使用pandas / python,我有两个日期时间系列s1和s2,它们是在包含日期/时间的df字段上使用'to_datetime'函数生成的。
当我从s2中减去s1时
s3 = s2 - s1
我得到一个类型为
的系列s3timedelta64 [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中提取天数并将它们保持为整数(对小时/分钟等不太感兴趣)?
提前感谢您的帮助。
答案 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)