《利用Python进行数据分析》之pandas的时间序列基础

本章以《利用python进行数据分析》的第10章:时间序列 为基础,整理了pandas 库中时间序列相关用法。
时间序列数据的意义取决于具体的应用场景,主要有以下几种:

  • 时间戳(timestamp)
  • 固定时期(period)
  • 时间间隔(interval)
  • 实验或过程时间

pandas提供了一组标准的时间序列处理工具和算法,可以轻松的对时间序列进行切片、聚合,对定期/不定期的时间序列进行重采样等。
这些工具大部分对金融和经济数据尤为有用,同时也可以用来分析服务器和日志数据。

1.日期和时间数据类型及工具

python标准库包含用于日期(date)和时间(time)的数据类型,主要用到datetime、time、calendar等模块。

datetime模块

datetime模块中的数据类型

  • date :以公历形式存储日期 (年月日)
  • time :将时间存储为时、分、秒、毫秒
  • datetime :存储日期和时间
  • timedelta :表示两个datetime值之间的差 (日、秒、毫秒)

(1)datetime

  • .now()函数,返回一个当前时间的datetime类型
  • datetime类型 有 .year ,.month , .day等属性
import pandas as pd
from pandas import Series
from pandas import DataFrame
from datetime import datetime
now=datetime.now()
now.year,now.month,now.day
(2019, 3, 18)

(2)timedelta

  • timedelta表示两个datetime对象之间的时间差
  • 有 .days , .seconds 等属性
delta = datetime(2019,3,18)-datetime(2019,1,1,8,15)
delta.days
delta.seconds
56700

可以给datetime对象加上(减去)一个或者多个timedelta,则产生一个新对象

from datetime import timedelta
start=datetime(2019,1,1)
start=start+timedelta(75)
start1=start-2*timedelta(75)
start
print (start)
print (start1)
2019-03-17 00:00:00
2018-10-18 00:00:00

(3)字符串和datetime的相互转换

datetime类型或者timestamp 类型 --> 字符串类型

  • str()函数
  • datetime的.strftime(‘%y-%m-%d‘)方法 ,其中格式化编码表格在P306
stamp=datetime(2019,1,1)
str1=str(stamp)
str2=stamp.strftime('%Y-%m-%d %H:%M:%S')
print (str1)
print (str2)
2019-01-01 00:00:00
2019-01-01 00:00:00

字符串类型 --> datetime类型或者timestamp 类型

  • datetime的.strptime方法
value='2019-01-01'
d1=datetime.strptime(value,'%Y-%m-%d')
print (d1)
2019-01-01 00:00:00

其中,是通过已知格式进行日期解析,但是编写格式定义比较麻烦
可以通过dateutil这个第三方包中parser.parse方法,可以对格式快速解析

from dateutil.parser import parse
parse('2011-01-01')
parse('6/12/2011',dayfirst=True)
datetime.datetime(2011, 12, 6, 0, 0)

pandas 通常是用于处理成组日期。
to_datetime方法可以解析多种不同的日期表示形式

datestrs=['7/6/2019','8/6/2019']
pd.to_datetime(datestrs)
DatetimeIndex(['2019-07-06', '2019-08-06'], dtype='datetime64[ns]', freq=None)

2.时间序列基础

pandas 最基本的时间序列类型就是以时间戳(python字符串 或datetime对象)为索引的Series
当创建一个带有DatatimeIndex的Series时,pandas就会创建一个TimeSeries

(1)TimeSeries的创建

import numpy as np
dates=[datetime(2019,1,1),datetime(2019,1,2),datetime(2019,1,3),datetime(2019,1,4)]
ts=Series(np.random.randn(4),index=dates)
ts
2019-01-01   -0.372832
2019-01-02    0.460571
2019-01-03    0.488445
2019-01-04   -0.208852
dtype: float64

(2)TimeSeries的索引、切片

TimeSeries是Series的一个子类,所以其索引切片都很类似

1.索引

ts.index[2]
Timestamp('2019-01-03 00:00:00')
ts[ts.index[2]]
ts[datetime(2019,1,2)]
0.4605713788911559

2.切片

可以传入字符串日期、datetime、timestamp
切片的是源数据的视图,与numpy的数组切片运算是一样的。

ts['2019-01-02':'2019-01-04']
2019-01-02    0.460571
2019-01-03    0.488445
2019-01-04   -0.208852
dtype: float64

原文地址:https://www.cnblogs.com/laiyaling/p/10655753.html

时间: 2024-10-14 11:04:20

《利用Python进行数据分析》之pandas的时间序列基础的相关文章

利用 Python 进行数据分析(五)NumPy 基础:ndarray 索引和切片

概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为array[index1:index2],意思是从index1索引位置开始,到index2索引(不包括index2)位置结束的一段数组.例如: 当把一个值赋值为一个切片时,该值会作用于此数组片段里每一个元素,例如: 二维数组 二维数组的索引 当以一维数组的索引方式访问一个二维数组的时候,获取的元素不在

利用 Python 进行数据分析(四)NumPy 基础:ndarray 简单介绍

一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 二.ndarray 是什么 ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点. ndarray 的一个特点是同构:即其中所有元素的类型必须相同. 三.ndarray 的创建 array() 函数 最简单的方法, 使用 NumPy 提供的

利用Python进行数据分析(15) pandas基础: 字符串操作

  字符串对象方法 split()方法拆分字符串: strip()方法去掉空白符和换行符: split()结合strip()使用: "+"符号可以将多个字符串连接起来: join()方法也是连接字符串,比较它和"+"符号的区别: in关键字判断一个字符串是否包含在另一个字符串中: index()方法和find()方法判断一个子字符串的位置: index()方法和find()方法的区别是:如果不包含子字符串,index()会抛出一个异常,而find()会返回-1. c

利用Python进行数据分析(14) pandas基础: 数据转换

数据转换指的是对数据的过滤.清理以及其他的转换操作. 移除重复数据 DataFrame里经常会出现重复行,DataFrame提供一个duplicated()方法检测各行是否重复,另一个drop_duplicates()方法用于丢弃重复行: duplicated()和drop_duplicates()方法默认判断全部列,如果不想这样,传入列的集合作为参数可以指定按列判断,例如: duplicated()和drop_duplicates()方法默认保留第一个出现的值,传入take_last=True

利用Python进行数据分析(11) pandas基础: 层次化索引

层次化索引 层次化索引指你能在一个数组上拥有多个索引,例如: 有点像Excel里的合并单元格对么? 根据索引选择数据子集 以外层索引的方式选择数据子集: 以内层索引的方式选择数据: 多重索引Series转换为DataFrame 层次化索引在数据重塑和分组中扮演着很重要的角色,例如,上面的层次化索引数据可以转换为一个DataFrame: 对于一个DataFrame,横轴和竖轴都可以有层次化索引,例如: 重排分级顺序 根据索引交换 swaplevel()函数可以将两个级别的数据进行交换,例如: 根据

利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(2)

2.3 NumPy数组的运算 数组,不需要编写循环即可对数据执行批量运算!NumPy用户称此特性为矢量化(vectorization). (1)大小相等的数组之间的任何算术运算都会将运算应用到元素级 (2)数组与标量的算术运算将标量值传播到各个元素 PS:**在python中表示幂运算,如,2**3表示2的3次方 (3)大小相同的数组之间的比较会生成布尔值数组 (不同大小的数组之间的运算叫广播,本书不需要多广播机制深入理解) 2.4 基本的索引和切片 数组与列表的重要区别在于:数组切片是原始数组

利用 Python 进行数据分析(三)使用 IPython 提高开发效率

一.IPython 简介 IPython 是一个交互式的 Python 解释器,而且它更加高效. 它和大多传统工作模式(编辑 -> 编译 -> 运行)不同的是, 它采用的工作模式是:执行 -> 探索 ,而大部分和数据分析相关的代码都含有探索式操作(比如试误法和迭代法),所以 IPython 能大大提高编码效率. IPython 发展到现在,它不仅仅只是一个加强版的 Python shell 了, 它集成了 GUI 控制台,这可以让你直接进行绘图操作:它还有一个基于 Web 的交互式笔记本

利用 Python 进行数据分析(九)pandas 汇总统计和计算

pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索引: 还有一种汇总是累计型的,cumsum(),比较它和 sum() 的区别: unique() 方法用于返回数据里的唯一值: value_counts() 方法用于统计各值出现的频率: isin() 方法用于判断成员资格: 安装步骤已经在首篇随笔里写过了,这里不在赘述.利用 Python 进行数据分析(一

利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)

一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 fill_value 参数指定填充值. 例如: fill_value 会让所有的缺失值都填充为同一个值,如果不想这样而是用相邻的元素(左或者右)的值填充,则可以用 method 参数,可选的参数值为 ffill 和 bfill,分别为用前值填充和用后值填充: 针对 DataFrame   重新索引