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

time,datetime模块时间序列讲解

1.time模块

  • import time

1.时间戳 1970年1月1日0时0分0秒到现在时间偏移量

time.time()
>>1661825563.8726559
time.ctime(time.time())
>>'Tue Aug 30 10:39:32 2022'

2. 结构化时间当地时间

t = time.localtime(time.time())  # 本地时间
t
>>'2022-08-30 10:17:07'
  • 获取年份
t.tm_year

在这里插入图片描述

  • 8时开始
time.gmtime(time.time())    # 0 时区
>>time.struct_time(tm_year=2022, tm_mon=8, tm_mday=30, tm_hour=2, tm_min=37, tm_sec=24, tm_wday=1, tm_yday=242, tm_isdst=0)
  • 格式化时间字符串
time.strftime("%Y-%m-%d %H:%M:%S",t)
>>'2022-08-30 10:17:07'
time.strptime('2021-12-10 21:24:22',"%Y-%m-%d %H:%M:%S")
>>time.struct_time(tm_year=2021, tm_mon=12, tm_mday=10, tm_hour=21, tm_min=24, tm_sec=22, tm_wday=4, tm_yday=344, tm_isdst=-1)

3. 求时间差

start_time = '2021-8-27 0:00:00'
end_time = '2022-8-30 0:00:00'

start_time1 =  time.strptime(start_time,"%Y-%m-%d %H:%M:%S")
end_time1 =  time.strptime(end_time,"%Y-%m-%d %H:%M:%S")

t = time.mktime(end_time1) - time.mktime(start_time1)

t_data = time.gmtime(t)
t_data

"时间差是%s年%s月%s日,%s时%s分%s秒"%(t_data.tm_year-1970,t_data.tm_mon-1,t_data.tm_mday-1,t_data.tm_hour,t_data.tm_min,t_data.tm_sec)
  • t_data是从1970.1.1到现在的时间差

在这里插入图片描述

2.datetime模块

  • from datetime import datetime

1.当地时间

now = datetime.now()
now
>>datetime.datetime(2022, 8, 30, 11, 20, 36, 116742)
now.year,now.month,now.day
>>(2021, 12, 13)

2. 求时间差

  • 1天, 68400秒
d = datetime(2021,12,10,20,0,0) - datetime(2021,12,9,1,0,0)
d
>>datetime.timedelta(1, 68400)

d.days,d.seconds
>>(1, 68400)
  • from datetime import timedelta
  • 现在时间加一天
start = datetime(2021,8,12)
start + timedelta(1,3600)
>>datetime.datetime(2021, 8, 13, 1, 0)

3.datetime 和字符串相互的转换

stamp = datetime(2021,8,12)
stamp
>>datetime.datetime(2021, 8, 12, 0, 0)
  • datetime转换成字符串
str(stamp)

stamp.strftime("%Y-%m-%d %H:%M:%S")
>>'2021-08-12 00:00:00'
  • 字符串转换成datetime
d = ['12/12/2021','1/1/2021']
d
>>['12/12/2021', '1/1/2021']

[datetime.strptime(i,"%m/%d/%Y") for i in d ]
>>[datetime.datetime(2021, 12, 12, 0, 0), datetime.datetime(2021, 1, 1, 0, 0)]
  • 字符串转换成datetime
  • from dateutil.parser import parse
parse('12/12/2021')
parse('2021-12-12')
parse('2021.12.12')
parse('2021 12 12')
>>datetime.datetime(2021, 12, 12, 0, 0)

4.时间序列

  • 1.生成一个时间序列的Series对象以及DataFrame对象
import pandas as pd
import numpy as np
from datetime import datetime
dates = [datetime(2021,12,12),datetime(2021,12,13),datetime(2021,12,14),datetime(2021,12,15),datetime(2021,12,16)]
dates

>>[datetime.datetime(2021, 12, 12, 0, 0),
 datetime.datetime(2021, 12, 13, 0, 0),
 datetime.datetime(2021, 12, 14, 0, 0),
 datetime.datetime(2021, 12, 15, 0, 0),
 datetime.datetime(2021, 12, 16, 0, 0)]

# Series对象 
ts = pd.Series(np.random.randn(5),index=dates)
ts

>>2021-12-12   -0.564338
2021-12-13    1.199842
2021-12-14    2.512560
2021-12-15    0.739945
2021-12-16   -0.483202
dtype: float64

# DataFrame对象
a = pd.DataFrame({"zhi":ts})
a

>>	          zhi
2021-12-12	-0.564338
2021-12-13	1.199842
2021-12-14	2.512560
2021-12-15	0.739945
2021-12-16	-0.483202
  • 取表格的索引值
a.index
ts.index
>>DatetimeIndex(['2021-12-12', '2021-12-13', '2021-12-14', '2021-12-15',
               '2021-12-16'],
              dtype='datetime64[ns]', freq=None)
  • 取Series对象中的时间对应的数
ts['2021-12-12']
ts['2021 12 12']
ts['2021.12.12']
ts['2021/12/12']
>>-0.5168556782608846
  • 生成1000天的日期
pd.date_range('2021/1/1',periods=1000)
>>DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
               '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08',
               '2021-01-09', '2021-01-10',
               ...
               '2023-09-18', '2023-09-19', '2023-09-20', '2023-09-21',
               '2023-09-22', '2023-09-23', '2023-09-24', '2023-09-25',
               '2023-09-26', '2023-09-27'],
              dtype='datetime64[ns]', length=1000, freq='D')
  • 生成1000天数据的对应值的表格
ts1 = pd.Series(np.random.randn(1000),index=pd.date_range('2021/1/1',periods=1000))
ts1

在这里插入图片描述

  • 取2021年全年的数据
ts1['2021']
  • 取2021年1月份的数据
ts['2021-01']
  • 对2021年1月份所有值求和
ts1['2021-01'].sum()
  • 查找2021/8/12到2021/8/19的所有数据
ts1['8/12/2021':'8/19/2021']   
>>2021-08-12   -1.154767
2021-08-13   -1.082007
2021-08-14    1.656297
2021-08-15   -0.363210
2021-08-16    0.085454
2021-08-17   -1.214048
2021-08-18   -0.674199
2021-08-19   -0.002772
Freq: D, dtype: float64
  • 2021/6/1之前的所有数据
ts1.truncate(after='1/6/2021')
>>2021-01-01   -1.384203
2021-01-02   -1.717038
2021-01-03   -1.929252
2021-01-04    0.703907
2021-01-05   -0.150625
2021-01-06   -0.773766
Freq: D, dtype: float64
  • 2023/7/8之后的所有数据
ts1.truncate(before='2023/7/8')

5.日期范围

  • 起止日期到结束日期
index = pd.date_range('2021-01-01','2021-03-01')   # 起 止   日期
index
  • 生成从前往后100天数据
pd.date_range('2021-01-01',periods=100)
  • 生成从后往前100天数据
pd.date_range(end='2021-01-11',periods=100)
  • 起止日期到结束日期中每3秒产生一条数据
pd.date_range('2021-08-01','2021-08-12',freq='3s')
  • 每个月产生一条数据
ts = pd.Series(np.random.randn(4),
                index=pd.date_range('1/1/2000', periods=4, freq='M'))
ts

6.重采样

  • 重采样
t = pd.DataFrame(np.random.uniform(10,50,(100,1)),index=pd.date_range('20170101',periods=100))
t
  • 统计每个月的数据之和
t.resample('M').sum()
>>
                 0
2017-01-31	957.657756
2017-02-28	837.778145
2017-03-31	851.612023
2017-04-30	308.126704
  • 每10天数据之和
t.resample('10D').sum()
  • 升采样
frame = pd.DataFrame(np.random.randn(2, 4),
                    index=pd.date_range('1/1/2000', periods=2,freq='W-WED'),
                    columns=['上海', '北京', '深圳', '广州'])
frame

在这里插入图片描述

  • 把每天的数据都加上
frame.resample('D').asfreq()

在这里插入图片描述

  • 向前填充
frame.resample('D').ffill()

在这里插入图片描述

  • 向后填充
frame.resample('D').bfill()

在这里插入图片描述

相关文章:

  • Hive的JDBC操作
  • Axure8.0教程:自动带出邮箱
  • VUE+webrtc-streamer实现实时视频播放(监控设备-rtsp)
  • Java进阶常用的辅助类(CountDownLatch 减法计数器、CyclicBarrier 加法计数器、Semaphore 信号量)
  • HWI的安装及使用
  • 【数据库】MySQL(索引、数据结构、性能、锁、事务等)面试题
  • Cython代码加密, 使用 Cython 将 Python 代码编译为二进制(将整个Django项目编译成功并部署)
  • C# 程序开机自动启动
  • html2canvs的一些问题
  • 金仓数据库 KingbaseES 插件参考手册 S(3)
  • Flutter聊天布局之图片视频上传、显示、保存到相册
  • Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution
  • 基于SSM框架实现学生管理系统
  • JavaScript聊天框插入表情: 点击表情时输入框失焦, 无法插入到输入框.
  • 使用esxcli命令升级VMware ESXi补丁
  • Java Agent 学习笔记
  • JavaScript DOM 10 - 滚动
  • jquery ajax学习笔记
  • js递归,无限分级树形折叠菜单
  • JS题目及答案整理
  • Linux快速复制或删除大量小文件
  • linux学习笔记
  • mongo索引构建
  • PHP的Ev教程三(Periodic watcher)
  • Python打包系统简单入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 阿里研究院入选中国企业智库系统影响力榜
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 关于Flux,Vuex,Redux的思考
  • 技术胖1-4季视频复习— (看视频笔记)
  • 讲清楚之javascript作用域
  • 使用SAX解析XML
  • 新版博客前端前瞻
  • 阿里云重庆大学大数据训练营落地分享
  • ​io --- 处理流的核心工具​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define、const、typedef的差别
  • #QT(一种朴素的计算器实现方法)
  • $forceUpdate()函数
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (k8s中)docker netty OOM问题记录
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (五)关系数据库标准语言SQL
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .describe() python_Python-Win32com-Excel
  • .NET性能优化(文摘)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中winform传递参数至Url并获得返回值或文件
  • /boot 内存空间不够