【问题标题】:Subtracting Date-time objects in Pandas在 Pandas 中减去日期时间对象
【发布时间】:2020-03-26 22:16:01
【问题描述】:

我的数据框中有两列包含 datetime64[ns] 值。我想从我的开始日期中减去结束日期并放置一个新列的值?我该怎么做?

这是我的数据示例:

开始日期(Column1)

2018-09-02 02:54:39

2018-09-02 15:14:31

2018-09-02 18:04:35

2018-09-02 18:04:35

EndedDate(第 2 列)

208-09-02 15:20:15

2018-09-02 18:04:34

2018-09-02 18:11:15

2018-09-02 18:39:34

在 excel 中,它将日期转换为数字(例如 43789,04)。我想对这些值做同样的事情并将它们转换成这些类型的数字,然后减去它们。但是,我发现在 Python 中很难做到这一点。

我目前得到的输出格式为 (12:25:36) 而我希望它是这样的 (43740.64-43740.12= 0.52)

【问题讨论】:

  • 不,它不能回答我的问题。在我的情况下,我必须处理时间。
  • 对不起,但我认为我的例子很清楚?你不明白哪一部分?我有两个我指定格式的日期,我还包括了我想要的输出。如果我的问题有问题,请告诉我
  • 最后一行应该是df['startedAt'] = df['startedAt'].apply(excel_date)
  • 嗯,循环的原因是什么?只使用df['startedAt'] = df['startedAt'].apply(excel_date)
  • 修好了别担心

标签: pandas dataframe datetime type-conversion


【解决方案1】:

像 cmets 中提到的 @Dan 不需要添加开始日期时间,因为减去。

所以用Series.dt.days 转换timedeltas 并加上Series.dt.seconds 除以86400

df['StartedDate'] = pd.to_datetime(df['StartedDate'])
df['EndedDate'] = pd.to_datetime(df['EndedDate'])

delta = df['EndedDate'] - df['StartedDate']
df['diff'] = delta.dt.days.astype(float) + (delta.dt.seconds.astype(float) / 86400)
print (df)
          StartedDate           EndedDate      diff
0 2018-09-02 02:54:39 2018-09-02 15:20:15  0.517778
1 2018-09-02 15:14:31 2018-09-02 18:04:34  0.118090
2 2018-09-02 18:04:35 2018-09-02 18:11:15  0.004630
3 2018-09-02 18:04:35 2018-09-02 18:39:34  0.024294

【讨论】:

  • 非常感谢您的回复!我现在有一个小问题。出现以下问题:type object 'datetime.datetime' has no attribute 'datetime'
  • @Vasilis - 你能检查dt.datetimedatetime.datetime 吗?
  • 为什么要转换成 Excel datenum,你把减法中的dt.datetime(1899, 12, 30) 取消了。这个问题不是归结为“如何以天为单位(包括小数)找到两个日期时间的差异”?
  • @Dan - 谢谢,你说得对,它更好更快。
  • @Vasilis - 很难的问题,也许在我的解决方案之前帮助df['StartedDate'] = pd.to_datetime(df['StartedDate']) df['EndedDate'] = pd.to_datetime(df['EndedDate'])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2016-07-23
  • 1970-01-01
相关资源
最近更新 更多