时间序列&日期学习笔记大全(上)
时间:2022-07-25
本文章向大家介绍时间序列&日期学习笔记大全(上),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
作者:湛林
来源:凹凸数据
1. 日期解析
# pd.to_datetime 可以解析多种格式的日期形式
pd.to_datetime(['1/1/2018', np.datetime64('2018-01-01'),
datetime.datetime(2018, 1, 1)])
# 生成固定频率的日期
pd.date_range('2018-01-01', periods=3, freq='H')
2. 时区设置
# 设置时间的时区
dti = dti.tz_localize('UTC')
# 调整时间的时区
dti.tz_convert('US/Pacific')
3. 用增量进行时间计算
a = pd.Timestamp('2018-01-05')
# 输出a 是周几
a.day_name()
# 加一天
b = a + pd.Timedelta('1 day')
b.day_name()
# 加一个工作日
c = a + pd.offsets.BDay()
c.day_name()
4. pandas的日期支持
pandas中一共有四种日期类型,分别是
- Date times:一种特定的日期、时间,可以含时区特征
- Time deltas:一种绝对时间增量
- Time spans:时间跨度
- Date offsets:与日历运算相关的相对时间持续时间(会被已object形式存储)
对于时间序列数据,传统的做法是在一个序列或DataFrame的索引中表示时间成分,这样就可以对时间元素执行操作。pandas也可以将时间作为数据
5. 时间戳与时间跨度 Timestamps vs. Time Spans
时间戳数据是时间序列数据的最基本类型,它将值与时间点关联起来。对于panda对象,它意味着使用时间点。
时间跨度是指一个时期,period。周期表示的跨度可以明确指定,也可以从字符串中推断得到。
上述二者都可以成为index,而且如果是列表,则会自动被识别为index
6. 生成时间数据
6.1 常规日期时间数据生成方法
# 传进Series,返回的也是Series
pd.to_datetime(pd.Series(['Jul 31, 2009', '2010-01-10', None]))
# 传进列表,返回的是一个DatetimeIndex
pd.to_datetime(['2005/11/23', '2010.12.31'])
# 传入dayfirst=True,设置解析日期时的格式是日-月-年,否则就是月-日-年
pd.to_datetime(['12-01-2012', '01-12-2012'], dayfirst=False)
# infer参数可以用于让计算机自己推测 时间间隔
pd.DatetimeIndex(['2018-01-01', '2018-01-03', '2018-01-05'], freq='infer')
# 通过format设置特定的解析模式
pd.to_datetime('2010/11/12', format='%Y/%m/%d')
6.2从不同列中合并日期,生成时间数据
df = pd.DataFrame({'year': [2015, 2016], 'month': [2, 3],'day': [4, 5], 'hour': [2, 3]})
# 用数据框的而不同列拼凑成一个日期数据
pd.to_datetime(df)
# 选特定的要素组成日期数据,必选的是年月日,可选的是时分秒等
pd.to_datetime(df[['year', 'month', 'day']])
6.3 遇到无法解析数据的处理
# 有无法解析的直接全部报错
pd.to_datetime(['2009/07/31', 'asd'], errors='raise')
# 无法解析的忽略,原封不动返回
pd.to_datetime(['2009/07/31', 'asd'], errors='ignore')
# 无法解析的返回 空值
pd.to_datetime(['2009/07/31', 'asd'], errors='coerce')
6.4 支持纪元时间和正常时间的转换
从元年开始,至今的秒数,可以转换为正常 年月日 的日期
pd.to_datetime([1349720105, 1349806505], unit='s')
# 正常时间-某特定时间,转化成从特定时间至今的秒数(整数)
(stamps - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')
6.5 使用origin创建时间
# 从1960-01-01起,分别加1,2,3。单位为Day
pd.to_datetime([1, 2, 3], unit='D', origin=pd.Timestamp('1960-01-01'))
7. 生成带时间戳的index
# 两种方法均可以生成时间戳index
pd.DatetimeIndex(dates)
pd.Index(dates)
7.1 生成大量的时间戳index
start = datetime.datetime(2011, 1, 1)
end = datetime.datetime(2012, 1, 1)
# date_range是自然日
pd.date_range(start, end)
# bdate_range是工作日
pd.bdate_range(start, end)
# 还可以传入开始,period,频率参数生成
pd.date_range(start, periods=1000, freq='M')
pd.bdate_range(start, periods=250, freq='BQS')
# 传入首尾,频率
pd.date_range(start, end, freq='BM')
pd.date_range(start, end, freq='W')
# 传入开始 或结尾,period参数
pd.bdate_range(end=end, periods=20) # 结束往前推20个周期
pd.bdate_range(start=start, periods=20) # 开始往后推20个周期
# 指定开始、结束和周期,将生成一个从开始到结束均匀间隔的日期范围
pd.date_range('2018-01-01', '2018-01-05', periods=5)
pd.date_range('2018-01-01', '2018-01-05', periods=10)
7.2 略过节假日和选特定日期的参数
weekmask = 'Mon Wed Fri' # 只能是 ‘Mon Tue Wed Thu Fri’ 多选
holidays = [datetime.datetime(2011, 1, 5), datetime.datetime(2011, 3, 14)]
# 设置holidays 和 mask,剔除holidays的日期,直选mask设定的周X,默认全部工作日
pd.bdate_range(start, end, freq='C', weekmask=weekmask, holidays=holidays)
8. 时间index的特殊属性
# 日期或字符串解析数据可以作为索引
ts[datetime.datetime(2011, 12, 25):] # 选2011.12.25后的日期数据
ts['10/31/2011':'12/31/2011'] # 切片选择数据
ts['2011'] # 按年份选择数据
ts['2011-6'] # 按年-月选择数据
# 数据框同样可以使用切片数据
# 选到日的时候,右侧是闭的,选
dft['2013-1':'2013-2'] # 最后一条2013/02的数据也会选入
dft['2013-1':'2013-2-28'] # 2013.2.28的全部数据会被选入
dft['2013-1':'2013-2-28 00:00:00'] # 有精确时间的,最后00:00:00被选入。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发之ProgressBar字体随着进度条的加载而滚动
- Android 动态注册监听网络变化实例详解
- linux 服务器自动备份脚本的方法(mysql、附件备份)
- 详解Android中Glide与CircleImageView加载圆形图片的问题
- android全局监控click事件的四种方式(小结)
- Linux下如何永久修改主机名的方法步骤
- android与asp.net服务端共享session的方法详解
- Android实现多个连续带数字圆圈效果
- Android录制mp3格式文件
- Linux内核设备驱动之虚拟文件系统笔记整理
- linux服务器上使用nginx访问本地静态资源的方法
- Android控件之菜单的创建方式
- 可支持快速搜索筛选的Android自定义选择控件
- Android编程实现的短信编辑器功能示例
- SELinux 入门详解