extracting days from a numpy.timedelta64 value

我使用的是 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

我如何看待这个系列的一个元素:

第3条[第10条]

我得到了这样的东西:

Timedelta64(206921100000000,‘ ns’)

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

提前谢谢你的帮助。

182882 次浏览

您可以将其转换为日精度的时间三角洲。要提取天的整数值,需要将其除以一天的时间差。

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

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

你可以找到更多关于它 给你

假设有一个时间差序列:

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)

使用 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

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

首先,使用以下方法转换大熊猫日期时间中的日期时间列:

## Convert time in pandas date time
df['Start'] = pd.to_datetime(df['Start'], errors='coerce')

完成后,使用以下命令减去两个日期:

df["Duration_after subtraction"] = (df['End_Time'] - df['Start_Time']   / np.timedelta64(1, 'm')

To convert into hour use 'h' instead of 'm'