timedelta64和日期时间转换

时间:2014-12-01 09:07:27

标签: python datetime numpy pandas

我的数据框df['start'], df['end']中有两个日期时间(Timestamp)格式的列。我想得到两个日期之间的持续时间。所以我创建了持续时间列

df['duration'] = df['start'] - df['end']

但是,现在duration列的格式为numpy.timedelta64,而不是我期望的datetime.timedelta

>>> df['duration'][0]
>>> numpy.timedelta64(0,'ns')

虽然

>>> df['start'][0] - df['end'][0]
>>> datetime.timedelta(0)

有人可以向我解释为什么数组减法会改变timedelta类型吗?有没有办法保留datetime.timedelta,因为它更容易使用?

1 个答案:

答案 0 :(得分:2)

这是在大熊猫0.15.0中实现Timedelta标量的动机之一。查看完整文档here

在> = 0.15.0中,timedelta64[ns]系列的实现仍然是np.timedelta64[ns],但在datetime.timedelta子类标量中,所有内容都完全隐藏在用户之外,Timedelta(这基本上是timedelta和numpy版本的有用超集)。

In [1]: df = DataFrame([[pd.Timestamp('20130102'),pd.Timestamp('20130101')]],columns=list('AB'))

In [2]: df['diff'] = df['A']-df['B']

In [3]: df.dtypes
Out[3]: 
A        datetime64[ns]
B        datetime64[ns]
diff    timedelta64[ns]
dtype: object

# this will return a Timedelta in 0.15.2
In [4]: df['A'][0]-df['B'][0]
Out[4]: datetime.timedelta(1)

In [5]: (df['A']-df['B'])[0] 
Out[5]: Timedelta('1 days 00:00:00')