- 不支持的操作数类型:'datetime.time' 和 'datetime.time'

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

Ca  Tên NVNL    Check in    Check out   Thời gian làm việc trong ca     Hỗ trợ ăn trưa
0   Ca Sáng     Ngô Hải Anh     08:15:00    12:13:00    NaN     NaN
1   Ca Chiều    Ngô Hải Anh     14:00:00    17:35:00    NaN     NaN
2   Ca Chiều    Ngô Văn Ninh    13:30:00    17:57:00    NaN     NaN
3   Ca Chiều    Nguyễn Hoàng Anh    14:00:00    17:43:00    NaN     NaN

我想将 Check out 减去 Check In 列。通过此代码

data['Thời gian làm việc']= data['Check out '] - data['Check in']

但我收到此错误:TypeError: 不支持的操作数类型 -: 'datetime.time' 和 'datetime.time' 请帮助我。

我认为这里可以通过 to_timedelta 将值转换为时间增量,但首先转换为 strings:

data['Thời gian làm việc']= (pd.to_timedelta(data['Check out'].astype(str)) - 
                             pd.to_timedelta(data['Check in'].astype(str)))

datetimes 通过 to_datetime:

data['Thời gian làm việc']= (pd.to_datetime(data['Check out'].astype(str)) - 
                             pd.to_datetime(data['Check in'].astype(str)))

我建议您退后一步,考虑一下您的数据模型。 time 不是时间点,引用自 Python 的文档:

A time object represents a (local) time of day, independent of any particular day

.. 所以减去时间没有多大意义。假设我晚上 9 点入住,两天后晚上 8 点退房。您认为“晚上 8 点减去晚上 9 点”代表什么?

您的签入/签出列最好建模为 datetime,其中 do 表示时间点。 datetimes 相减确实有效,而且它有实际意义:分隔两个时间点的时间。