【问题标题】:adding,subtracting datetime.time columns pandas添加,减去 datetime.time 列 pandas
【发布时间】:2019-06-07 12:50:03
【问题描述】:

我有以下数据框

flight_departure   arrival_at_desination   boarding  total_flight_time   total_flight_time/2    time_to_collect_bags
0:00                     4:00               23:30           4:00                  2:00                     4:30
9:00                     14:30              8:30            5:30                  2:45                      15:00

flight_departure- 0:00 signifies 12:00 AM
arrival_at_desination- 4:00 signifies 4 AM
boarding = flight_departure-30 minutes(23:30)
total_flight_time=arrival_at_desination-flight_departure(4 hours)

total_flight_time/2-calculates hald time(2 hours in this case)
time_to_collect_bags=arrival_at_desination+30 minutes(4:30AM)

当我尝试执行以下操作时

df['arrival_at_desination']-df['flight_departure']

它给了我以下错误

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

我应该如何减去两个 datetime.time 列?

【问题讨论】:

  • Uhmm... .sub() 方法可以解决这个问题吗?你试过了吗?
  • 当我尝试 df['arrival_at_desination']-df['flight_departure'] 时,它给了我完全相同的错误
  • (df['arrival_at_desination']-df['flight_departure']).astype('timedelta64[m]') 这是如何工作的?
  • 检查this的答案,已经解决了类似的问题

标签: python pandas time-series


【解决方案1】:

一般来说,如果没有日期信息,就不可能减去两次(如果到达时间是凌晨 1 点,出发时间是晚上 11 点呢?)。如果您假设他们在同一日期,并且到达时间总是大于出发时间,您可以执行以下操作。这不漂亮,希望有人能提供更好的答案。

(pd.to_datetime(df.arrival_at_desination.astype(str), format='%H:%M:%S') -
    pd.to_datetime(df.flight_departure.astype(str), format='%H:%M:%S'))

【讨论】:

  • 谢谢,我不知道怎么做,但你的第一行对于解决方案来说已经足够了,唯一可能的方法是将完整的日期和时间数据作为两个列中的一个值,然后你可以减去它们并获得您想要的结果。
【解决方案2】:

你必须转换成数据时间格式才能转换试试这个

arrival = pd.to_datetime(df['arrival_at_desination'])
dept = pd.to_datetime(df['flight_departure'])
diff = arrival - dept

这就是我得到的,希望对你有所帮助,

0   -1 days +20:00:00
1   -1 days +18:30:00

否则将日期添加到数据中,与时间连接并执行上述操作

【讨论】:

  • 在我安装的 python3 上不起作用。 TypeError:不支持的操作数类型 -:'datetime.time' 和 'datetime.time'。它需要一个合并步骤。
【解决方案3】:

我发现要使这项工作 (python3.68) 工作,您需要将时间与日期结合起来——真假。

import pandas as pd


df = pd.DataFrame(columns=['to','fr','ans'])

date = "1-1-01 "
tmp = pd.Series(['13:03:12','11:57:18','10:07:47'])
tm =pd.to_datetime(date+tmp, format='%d-%m-%y %H:%M:%S')

tmp = pd.Series(['13:02:12','10:57:18','10:07:22'])
tm2 =pd.to_datetime(date+tmp, format='%d-%m-%y %H:%M:%S')

df.to = tm2
df.fr = tm

(df.fr-df.to)
#if you want this as seconds -- which for my applications has been more useful.
(df.fr-df.to).astype('timedelta64[s]')

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2021-12-24
    • 2015-05-11
    • 2017-07-24
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多