29、pandas的时间日期高效操作
在前面的文章中,我们总结了一下关于时间日期的简单计算,但是我们发现很多功能都是datetime库提供的,那么pandas有没有提供跟日期时间有关的函数呢?
自然是有的就是.dt,跟.str一样,后面可以加多个函数进行操作。
比如现在有一组数据:
![](https://img.haomeiwen.com/i8612260/87c1e40cc0ee0125.png)
由于日期列都是datetime64格式的,当导出到excel或者别的地方的时候就会出现格式不是我们想要的:
![](https://img.haomeiwen.com/i8612260/9e3414d191c8474d.png)
这种在导出后还要再次进行格式的调整,将会变得很麻烦。
所以我们要看一下有没有其它的方式导出之后就直接是标准的日期格式的。
一、日期格式设置:dt.strftme()
![](https://img.haomeiwen.com/i8612260/44efaaf31f4a2c44.png)
需要注意的是在经过.dt.strftime()处理后的数据就不再是datetime类型了,就算导出到excel也是不能直接被识别为日期的,所以处理的时候要慎重。
当然,还可以处理成其它的格式:
![](https://img.haomeiwen.com/i8612260/23fbcda92faf203f.png)
![](https://img.haomeiwen.com/i8612260/24da51f4c90feef1.png)
![](https://img.haomeiwen.com/i8612260/234ae3812714de5f.png)
![](https://img.haomeiwen.com/i8612260/460cb9f1cb4c3232.png)
![](https://img.haomeiwen.com/i8612260/1166f148a9a4d4dc.png)
还有设置格式更简洁的方式:
![](https://img.haomeiwen.com/i8612260/ed6b78484d468f8f.png)
只要记住大写Y和小写y区别,其它的就都比较简单了。dt.strftime()与Datetime库里的格式设置不一样,这一点要注意区别。
二、 提取时间日期中的 部分信息:
dt.year能直接提取出年份,而且是整数型:
![](https://img.haomeiwen.com/i8612260/21a184ddf3416742.png)
其它信息和年份差不多:
![](https://img.haomeiwen.com/i8612260/6b631a039ddc850c.png)
![](https://img.haomeiwen.com/i8612260/16bc7bdada0621d9.png)
![](https://img.haomeiwen.com/i8612260/5379916b8d102782.png)
![](https://img.haomeiwen.com/i8612260/a8076d7b5d85a552.png)
![](https://img.haomeiwen.com/i8612260/85c8a0ccf1cdf5eb.png)
还可以返回星期几:(星期一是0,星期天是6,跟切片的时候很相似。)
![](https://img.haomeiwen.com/i8612260/7917f2c234462e59.png)
返回周数是df.week()。
这就联想到前面的文章提到的timedelta类型提取日期,那这个dt能不能用在timedelta类型的数据上呢?
![](https://img.haomeiwen.com/i8612260/a3afa5f40d21ee6e.png)
![](https://img.haomeiwen.com/i8612260/4e85ace6903d973e.png)
由上图可知以这样的一直方式比匿名函数更加的方便,这里的.days很类似datetime库里面的.days。相当于用.dt.days代替了之前的map(lambda x:x.days)。
按照这个逻辑,.dt.total_seconds()也是可以使用的:
![](https://img.haomeiwen.com/i8612260/1d4f731dabfa26c7.png)
三、计算天数相关的函数
计算是一年当中的第几天:
![](https://img.haomeiwen.com/i8612260/c0485cdf21fe1bc9.png)
同理计算一年当中的第几周(.dt.weekofyear):
![](https://img.haomeiwen.com/i8612260/cc64a411a96caad6.png)
除了上面这些,还有.dt后面还可以接很多函数,实在太多,就不一一介绍了。
需要注意的是用split出来后的是obj格式,应该先使用datetime.strptime转为时间格式之后才能进行dt.strftime处理。