无法减去两个时间列

时间:2019-05-05 00:37:36

标签: python pandas datetime

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

我想创建一个新列,该列是time_exit和time_entry之间的减法。 但是,当我尝试代码时:

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

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

如果我这样做:

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

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

但是对两者进行描述时,它们具有相同的计数,即381185。

我迷路了。

3 个答案:

答案 0 :(得分:1)

看着第一个错误,您的列的数据类型错误;您正在尝试从另一个减去一个字符串。因此,您应该转换这些列:

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']]返回了DataFrames,而不是Series。

减去两个DataFrames,每个DataFrames分别具有一列(并且这些列具有不同的名称),将返回第三个数据框,其中包含两列,并用nan填充,不能将其分配给单个列。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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