【问题标题】:timedelta64 and datetime conversiontimedelta64 和日期时间转换
【发布时间】:2015-01-29 06:05:20
【问题描述】:

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

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,因为它更容易使用?

【问题讨论】:

标签: python datetime numpy pandas


【解决方案1】:

这是在 pandas 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')

【讨论】:

  • 谢谢!这很有帮助。只是一个问题,那我该如何升级 pandas 模块呢?
猜你喜欢
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多