【问题标题】:Get end_time by adding start_time and execution time in pandas通过在 pandas 中添加 start_time 和执行时间来获取 end_time
【发布时间】:2021-06-23 05:28:18
【问题描述】:

我有两列 start_time 和 execution_time,我需要使用这两列并创建一个新列 end_time,这是我的 start_time 和 execution_time 的总和:

        start_time        execution_time   end_time
   0    13-05-2013 04:04    00:24:48       13-05-2013 4:28:48
   1    13-05-2013 04:44    00:09:23       13-05-2013 4:53:23
   2    13-05-2013 23:24    00:06:51       13-05-2013 23:30:51
   3    22-05-2013 16:31    00:06:05       22-05-2013 16:37:05
   4    22-05-2013 20:55    00:06:51       22-05-2013 21:01:51

这里的一个问题是,如果分钟超过 60,它应该被追加到下一个小时,如最后一条记录所示。如果小时超过 24,它应该附加到第二天。

请帮助我获得结果。提前致谢

【问题讨论】:

  • 使用df['end_time']= pd.to_datetime(df.start_time) + pd.to_timedelta(df.execution_time.astype(str))
  • 还有here
  • 我试过这个但我得到 ValueError: invalid literal for int() with base 10: '' 并且错误出现在 pd.to_timedelta(df.execution_time.astype(str))
  • 你可以试试df['end_time']= pd.to_datetime(df.start_time) + pd.to_timedelta(df.execution_time.astype(str), errors='coerce').fillna(pd.Timedelta(0)) 吗?
  • 是的,这行得通。非常感谢@jezrael。但是为什么我会更早地收到 ValueError 呢?这是否意味着我有南的?

标签: python pandas


【解决方案1】:

这里有一些空字符串或Time 列中的一些其他错误值,因此有必要将errors='coerce' 添加到to_timedelta 用于缺少值NaT 用于此值并将它们替换为00:00:00 timedelta 以避免丢失end_time 中的值如果添加 start_time 转换为日期时间:

td = pd.to_timedelta(df.execution_time.astype(str), errors='coerce').fillna(pd.Timedelta(0))
df['end_time']= pd.to_datetime(df.start_time) + td

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2018-06-11
    • 2014-04-28
    • 2020-05-09
    • 2020-02-15
    相关资源
    最近更新 更多