无法减去两个时间列

2024-04-28 05:02:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据集: https://i.imgur.com/Ufk7Tvz.jpg

我想创建一个新列,它是time\u exit和time\u entry之间的减法。 但是,当我尝试代码时:

df[['tempo']] = df['time_exit'] - df['time_entry']

结果是:TypeError:-:'str'和'str'的操作数类型不受支持

如果我这样做了:

df[['tempo']] = df[['time_exit']] - df[['time_entry']]

结果是:ValueError:列的长度必须与键的长度相同。你知道吗

但对两者进行描述,它们有相同的计数,即381185。你知道吗

我迷路了。你知道吗


Tags: 数据代码httpscom类型dftimeexit
3条回答

查看第一个错误,您的列具有错误的数据类型;您试图从另一个字符串中减去一个字符串。因此,您应该转换这些列:

df['time_exit'] = pd.to_datetime(df['time_exit'])
df['time_entry'] = pd.to_datetime(df['time_entry'])

那么

df['tempo'] = df['time_exit'] - df['time_entry']

应该会成功的。你知道吗

第二种方法失败了,因为df[['time_exit']]df[['time_entry']]返回的是数据帧,而不是序列。你知道吗

减去两个数据帧,每个数据帧有一列(并且这些列有不同的名称),返回第三个数据帧,其中有两列,用nan填充,不能分配给单个列。你知道吗

applyTimedelta一起使用:

#sample data
df = pd.DataFrame({'start': ['07:15:00', '08:00:00'], 'end':['08:15:00', '10:00:00']})

# apply with pd.Timedelta
df['diff'] = df['end'].apply(pd.Timedelta) - df['start'].apply(pd.Timedelta) 

      start       end     diff
0  07:15:00  08:15:00 01:00:00
1  08:00:00  10:00:00 02:00:00

我建议先指定当前时间数据的格式

df['time_exit'] = pd.to_datetime(df['time_exit'] , errors='coerce', format='%d/%m/%Y %H:%M:%S', infer_datetime_format=True)
df['time_entry'] = pd.to_datetime(df['time_entry'] , errors='coerce', format='%d/%m/%Y %H:%M:%S', infer_datetime_format=True)

在这之后:

df[['tempo']] = df['time_exit'] - df['time_entry']

如果您只需要天数差异:

df[['tempo']] = (df['time_exit'] - df['time_entry']).dt.days

相关问题 更多 >