Pythoh 计算2个时间戳/开始和结束时间段的差值建议

问题背景:数据集存在2个时间变量:订单开始时间,订单结束时间(如下图)

需求:计算2个时间差值。

思路:先确认变量的数据类型,然后调试下是否有超过天的数据,没有的话就分别分割成时,分,秒。然后转化为分钟单位,

最后差值=结束时间-开始时间

对应操作如下:

1.修改时间数据类型:

df1['start_time'] = pd.to_datetime(df1.start_time)
df1['end_time'] = pd.to_datetime(df1.end_time)

2.分割时间:

提取小时有2种方式:

#方式1:df1['订单开始-小时'] = [datetime.strftime(x, '%H') for x in df1['start_time']]

#方式2:df1['订单开始_小时']=df1['start_time'].dt.hour
df1['订单开始_日']=df1['start_time'].dt.day
df1['订单结束_日']=df1['end_time'].dt.day
df1['订单开始_小时']=df1['start_time'].dt.hour
df1['订单结束_小时']=df1['end_time'].dt.hour
df1['订单开始_分钟']=df1['start_time'].dt.minute
df1['订单结束_分钟']=df1['end_time'].dt.minute
df1['订单开始_秒']=df1['start_time'].dt.second
df1['订单结束_秒']=df1['end_time'].dt.second

3.计算差值

df1['使用分钟'] = (df1.订单结束_日 - df1.订单开始_日)*24*60 + (df1.订单结束_小时 - df1.订单开始_小时)*60 + (df1.订单结束_分钟 - df1.订单开始_分钟)+(df1.订单结束_秒 - df1.订单开始_秒)/60
df1.head(5)

但是,虽然逻辑上没有问题,实际数据会有问题,假如有跨本月底和下个月初交接,8.31号和9.1号,就会出现差值为负。

最好是如下操作(未名大神指点的):

pandas 对于 datetime 类型的数据,可以直接相减获得 Timedelta 数据,类似于表示时间段的数据类型,这类数据可以直接使用 .dt.seconds 获得这段时间对应的秒数,注意是 seconds 不是 second,多了一个 s,所以要获得订单使用的时间,可以直接这样写:

df1['duration_min'] = (df1['end_time'] - df1['start_time']).dt.seconds/60

df1['duration_min'] = (df1['end_time'] - df1['start_time']).dt.seconds/60

猜你喜欢

转载自blog.csdn.net/qq_20749835/article/details/106810549