当前位置: 首页 > news >正文

Python数据分析之时间序列的处理

引入

DataFrame处理的数据中经常会看到某一列的数据类型是时间类型或者是字符串但是需要转成时间类型。什么是时间类型?与Python中使用的模块time、datetime等有什么联系?

首先看看下面这张图,如果看到数据的如果类型是datetime64[ns]说明就是DataFrame中的日期时间类型。

但是有时候我们看到的数据明明都是日期格式,怎么就偏偏不是datetime64[ns]类型呢?而显示的是object类型,比如下面你看到的数据

上面看到都是object类型,object类型在获取日期时间的年月日时分秒的时候就不方便,比获取

简单回顾Python日期时间模块

python标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能。我们主要会用到datetime、time以及calendar模块。

datetime模块

datetime模块常用的类如下:

类型说明
date日期对象,以公历形式存储日期(年、月、日)
time时间对象,将时间存储为:时、分、秒、毫秒
datetime存储日期和时间
timedelta时间间隔,表示两个datetime之间的差

附录(日期和时间的格式化符号表)

符号说明
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(01-12)
%M分钟数(00=59)
%S秒(00-59)
%a本地简化星期名称
%A本地完整星期名称
%b本地简化的月份名称
%B本地完整的月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M.或P.M.的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%Z当前时区的名称
%%%号本身

date类代码演示:

datetime.date(year, month, day)

from datetime import date
# 获取当前的日期
today = date.today()  
print(today) #  2021-08-10
print(today.day)  # 10
# 也可以创建一个指定的日期对象
tomorrow = date(2021,8,11)
print(tomorrow) # 2021-08-11
print(tomorrow.day)  # 11
print(today.strftime('%Y年%m月%d日'))  # 相当于格式化输出

time类代码演示:

datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )

from datetime import time
# 创建一个time对象
t = time(14,20,59,83999)
print(t) # 14:20:59.083999
print(t.strftime('%H:%M:%S')) # 相当于格式化输出

datetime代码演示:

datetime相当于date和time结合起来 datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

from datetime import datetime 
now = datetime.now()
print(now)  # datetime.datetime(2021, 8, 10, 15, 21, 6, 581886)
print(now.year) # 2021
print(now.month) # 8
print(now.day) # 21
print(now.date()) 
print(now.time())
print(now.strftime('%Y年%m月%d日  %H:%M:%S')) # 格式化输出

timedelta代码演示:

使用timedelta可以很方便的在日期上做天days,小时hours,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

from datetime import * 
dt = datetime.now()
#日期减一天,dt1和dt2都表示昨天,两种不同的操作方式
dt1 = dt + timedelta(days=-1) # 昨天
dt2 = dt - timedelta(days=1)  # 昨天 
dt3 = dt + timedelta(days=1) # 明天
print(dt1) 
print(dt2)
print(dt3)
# 也可以小时的加减
t1 = dt + timedelta(hours=1)
print(t1)

案例:获取指定日期月份的最后一天的日期和本月天数

from datetime import datetime,date,timedelta

date1 = datetime.now()
def eomonth(date_object):
    if date_object.month == 12:
        next_month_first_date = date(date_object.year+1,1,1)
    else:
        next_month_first_date = date(date_object.year, date_object.month+1, 1)
    
    return next_month_first_date - timedelta(1)

print(eomonth(date1))
print(eomonth(date1).day)

time模块

time模块中时间表现的格式主要有三种:

a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

b、struct_time时间元组,共有九个元素组。

c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式

import time

# 生成timestamp
print(time.time())  # 时间戳时间
print(time.localtime())  # 生成struct_time
print(time.strptime('2021-08-10 16:37:06', '%Y-%m-%d %X'))  # 格式化时间转struct_time
print(time.strftime("%Y-%m-%d %X",time.localtime()))  # struct_time转格式化时间

当然还有大家常用的time.sleep(seconds)休眠。

panads日期时间操作

我们在数据分析的时候时间日期的操作无非下面几种:

object转日期时间类型

原有数据类型(object)和展示形式想得到的格式代码
2021-08-102021-08-10pd.to_datetime(data['time_object'])
08/10/212021-08-10pd.to_datetime(data['time_object'],format='%m/%d/%y')
2021-08-10 14:20:592021-08-10 14:20:59pd.to_datetime(data['time_object'])
2021年08月2021-08-01pd.to_datetime(data['time_object'],format='%Y年%m月')

日期转固定格式的

原有数据类型(datetime64)和展示形式想得到的格式代码
2021-08-10 14:20:592021-08-10data['datetime_col'].dt.date 或者pd.to_datetime(data['datetime_col'].dt.strftime('%Y-%m-%d'))
2021-08-10 14:20:592021-08-10 00:00:00data['datetime_col'].dt.strftime('%Y-%m-%d 00:00:00')

提取日期类型的年月日

原有数据类型(datetime64)和展示形式想得到的格式代码
2021-08-10 14:20:592021data['datetime_col'].dt.year
2021-08-10 14:20:598data['datetime_col'].dt.month
2021-08-10 14:20:5910data['datetime_col'].dt.day
2021-08-10 14:20:5914data['datetime_col'].dt.hour
2021-08-10 14:20:5920data['datetime_col'].dt.minute
2021-08-10 14:20:5959data['datetime_col'].dt.second

时间差的计算

startdateenddatedifference代码
2018-02-14 12:20:362019-02-28 13:38:41379.054225(data['datetime_col']-data['datetime_col'])/np.timedelta64(1,'D')

如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,
关注与私信博主(08)学习更多Python知识与技巧,课件,源码,安装包,还有最新大厂面试资料等等等
咱们下期见。
收藏 等于白嫖,点赞才是真情。

相关文章:

  • 【PHP】如何搭建服务器环境 原生篇 | Ubuntu 18.04 + PHP8.1 + MySQL5.7 + Nginx 1.4
  • 【c语言】数据在内存中的存储
  • 数据结构考试必须要掌握的重点知识
  • 进程管理4——进程优先级
  • 外网访问内网80端口【内网穿透】
  • Android性能优化技术,在大厂中为何这么看重?进大厂必学好
  • 基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程
  • 水平分表之基因法
  • Gorm笔记
  • 抽空做了个“胃肠镜”,唠唠嗑
  • 现在工作是不是很难找?
  • Colmap算法pipeline
  • QCC51XX---TwsTopology_Init(goals分析)
  • 新概念英语第2册-第01课笔记
  • linux环境下基于opengl的3*3可控魔方绘制
  • 「面试题」如何实现一个圣杯布局?
  • 2017 年终总结 —— 在路上
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • echarts的各种常用效果展示
  • Intervention/image 图片处理扩展包的安装和使用
  • Mithril.js 入门介绍
  • Odoo domain写法及运用
  • rabbitmq延迟消息示例
  • React组件设计模式(一)
  • Vue2 SSR 的优化之旅
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 前端自动化解决方案
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 用 Swift 编写面向协议的视图
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • python最赚钱的4个方向,你最心动的是哪个?
  • 通过调用文摘列表API获取文摘
  • #vue3 实现前端下载excel文件模板功能
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (003)SlickEdit Unity的补全
  • (9)STL算法之逆转旋转
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (solr系列:一)使用tomcat部署solr服务
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)Oracle存储过程编写经验和优化措施
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @RequestMapping-占位符映射
  • [20170705]diff比较执行结果的内容.txt
  • [AIGC 大数据基础]hive浅谈
  • [Android]创建TabBar