Pandas日期函数总结

背景

有时,我们需要对日期和时间进行简单的运算。

例如:

img

一: 求日期差距

上面这组数据中,有两组日期,我们可以直接求出他们之间的间隔。

img

简单的相减就能得出两个日期之间的日期差。

但是很奇怪,为什么得出的结果里面有days这个单位呢?得出的数据是什么属性呢?

img

原来得出的并不是整数型也不是个字符串,而是datetime库里常用的timedelta型。

怎样把这些数据转换成整数,方便我们后续使用呢?

img

对每一个元素使用一次.days就能将数据转换为整数。

timedelta型数据,不能直接转换成年、周、月等,只能转换为天数、秒数和微秒数。而且在返回秒数和微秒数时,如果是负数时,容易出错(例如:-3秒会被处理为-1天86397秒)

img
img

所以在转换间隔秒数时最好使用total_seconds()

img

二 计算几天之后的日期

如果我想知道,n天前或者n天后的日期,可以直接加减么?

img

很抱歉,不可以。。。。。。

这个功能要使用datetime库里面的timedelta函数。

img

减法也可以:

img

不仅仅是加减天数,也可以加减小时:

img

加减星期数:

img

除了加减天数、小时数、星期数,还可以加减分钟minutes, 秒seconds,毫秒和微秒。不能直接加减月数,年数。毕竟每年和每个月的天数是不一样的。

三、整列都去计算和另一个日期的差距

如果需要对所有整列都减去同一个日期,我们需要定义一个日期,让系统识别得出来。

img

这样日期和日期之间就能运算了:

img

总的来说:pandas里面的日期运算并不是特别方便,需要借助datetime库,而且timedelta数据类型转换成整数时并不容易。

四、 引入pandas中的dt概念

自然是有的就是.dt。跟.str一样,后面可以加多个函数进行操作。

这里的dt自然代表的是datetime(我猜)。

比如现在有一组数据:

img

由于日期这一列是datetime64格式,当导出到excel或者别的地方的时候,就会出现格式不是我们想要的。

img

这种在导出后还要再次调试格式,让我的懒病都发作了。

五、 日期设置格式:dt.strftime()

img

注意:经过.dt.strftime()处理后的数据就不再是datetime类型,就算导出到excel也是不能直接被识别为日期的,所以处理时要慎重。

当然,还可以处理成其它格式:

img

还有设置格式更简洁的方式:

img

dt.date只提取日期部分

只要记住大写Y和小写y的区别,其它的就可以随心所欲了。dt.strftime()与Datetime库里面的格式设置是不一样的,请注意区别。

六、 提取时间日期中的 部分信息:

dt.year能直接提取出年份,而且是整数型。

img

其它信息和年份差不多:

img

月份

img

img

小时

img

时间

img

季度

还可以返回星期几:(星期一是0,星期天是6,跟切片的时候很相似。)

img

七、 timedelta上面使用dt函数

这就联想到上一篇文章提到的timedelta类型提取日期,那这个dt能不能用在timedelta类型的数据上呢?

img
img

实现了,而且更方便了,这里的.days很类似datetime库里面的.days。相当于用.dt.days代替了之前的map(lambda x:x.days)。

按照这个逻辑,.dt.total_seconds()也是可以使用的。

img

的确可行。

八、计算天数相关:

这个可以计算日期位于某一年的第几天(正常计数):

img

下面这个可以计算这些日期位于一年第几周:

img

除了上面这些,还有.dt后面还可以接很多函数,实在太多,就不一一介绍了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容