Python

您所在的位置:网站首页 excel怎么把两个日期相减计算天数 Python

Python

2024-07-13 23:17| 来源: 网络整理| 查看: 265

在数据帧里面,经常碰到要计算两个时间格式列的天数差,比如用户的活跃天数,我们肯定是用最近登录日期减去用户的下载日期,但是要怎么做呢?

其实很简单,pandas的dataframe是可以直接用列相减的,当然是时间类型和数值类型的才行。数值类型加减乘除不用多说了,基本和数值的加减乘除是一样的。无非就是要对除的列要做一下 replace(np.inf, 0) 处理,这个是防止出现除零的情况,一般是用0替换掉就可以了。

那时间格式的怎么办?

其实时间格式直接相减,会得到一个 np.timedelta64 类型的数据,如:

df['diff_date'] = df['datetime'] - df['last_datetime'] df['diff_date'] """ 得到的结果: 0 0 days 00:10:28.018523 1 0 days 00:03:32.858611 2 0 days 01:03:23.596080 3 0 days 00:02:13.528628 4 0 days 00:04:21.056487 ... 49061 0 days 00:01:20.101328 49062 0 days 00:35:56.992573 49063 0 days 00:00:24.712446 49064 0 days 00:04:17.424946 49065 0 days 00:01:53.180180 Name: diff_date, Length: 49066, dtype: timedelta64[ns] """

那这个我们要怎么化成我们需要的值,比如我们要知道两个时间的秒数差,看看每个用户的间隔时间是多久,可以这么做:

# # 计算两个日期的差值 row_index = 45000 # 还是取这一行的数据显示,不要显示全部的了 print('日期1:', df['datetime'].values[row_index], ',日期2:', df['last_datetime'].values[row_index]) df['diff_date_second'] = ((df['datetime'] - df['last_datetime'])/pd.Timedelta(1, 'S')).fillna(0).astype(int) print('两个日期相差的秒数:', df['diff_date_second'].values[row_index]) """ 这个打印的结果如下: 日期1: 2020-03-24T21:03:42.659895000 ,日期2: 2020-03-24T05:23:54.462034000 两个日期相差的秒数: 56388 """

我们看到,我把相减的值又除了一个Timedelta,并且按秒去计算,这样我们得到的结果就是秒数了。在后面还跟了一个fillna(0),意思是万一有空值,就用0填充,即使我们知道没有空值,但我推荐还是这么做一下会好一些。而最后的astype(int),我需要把这一列当做整数型去做,免得有小数点,这样我们的数据看起来会整洁很多!

那么这个方式的最核心的就是 pd.Timedelta(1, 'S') 了,看到这里我想大家都知道怎么求天数差,小时差,分钟差了吧!原理都一样的,我这里都列举出来吧:

# # 计算两个日期的差值 row_index = 45000 print('日期1:', df['datetime'].values[row_index], ',日期2:', df['last_datetime'].values[row_index]) df['diff_date_second'] = ((df['datetime'] - df['last_datetime'])/pd.Timedelta(1, 'S')).fillna(0).astype(int) print('两个日期相差的秒数:', df['diff_date_second'].values[row_index]) df['diff_date_minute'] = ((df['datetime'] - df['last_datetime'])/pd.Timedelta(1, 'min')).fillna(0).astype(int) print('两个日期相差的分钟数:', df['diff_date_minute'].values[row_index]) df['diff_date_hour'] = ((df['datetime'] - df['last_datetime'])/pd.Timedelta(1, 'H')).fillna(0).astype(int) print('两个日期相差的小时数:', df['diff_date_hour'].values[row_index]) df['diff_date_day'] = ((df['datetime'] - df['last_datetime'])/pd.Timedelta(1, 'D')).fillna(0).astype(int) print('两个日期相差的天数:', df['diff_date_day'].values[row_index]) """ 打印的结果: 日期1: 2020-03-24T21:03:42.659895000 ,日期2: 2020-03-24T05:23:54.462034000 两个日期相差的秒数: 56388 两个日期相差的分钟数: 939 两个日期相差的小时数: 15 两个日期相差的天数: 0 """

大家可以自己算算看结果对不对~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3