文章目录

  • 前言
  • 1️⃣datetime模块
  • 2️⃣strftime()方法
  • 3️⃣strptime()方法
  • Pandas时间序列基础


前言

在金融、经济、物理学等领域,都需要在多个时间点观测或者测量数据,这样就产生了关于时间序列的数据。

时间序列数据(Time Series Data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于描述现象随时间变化的情况。
很不巧,Pandas为我们提供了强大的时间序列数据处理的方法。

1️⃣datetime模块

Python标准库包含了日期和时间数据的数据类型,datetime模块是开始处理时间数据最广泛的。

# 创建时间
import datetime
time = datetime.time(13, 14, 20)
print(time)
# 获取小时
print(time.hour)
# 获取分钟
print(time.minute)
# 获取秒
print(time.second)

时间(time)类型的使用:

# 创建时间
import datetime
time = datetime.time(13, 14, 20)
print(time)
# 获取小时
print(time.hour)
# 获取分钟
print(time.minute)
# 获取秒
print(time.second)

日期和时间的结合体–日期时间(datetime):

import datetime
# 创建日期时间
datetime = datetime.datetime(2019, 9, 9, 13, 14, 20)
print(datetime)
# 获取年
print(datetime.year)
# 获取月
print(datetime.month)
# 获取日
print(datetime.day)
# 获取小时
print(datetime.hour)
# 获取分钟
print(datetime.minute)
# 获取秒
print(datetime.second)

datetime的time方法可以创建时间,date方法可以创建日期,datetime方法则是日期和时间的结合体。

通过year、month、day、hour、minute、second属性,可以获取到相应的日期或者时间的值。

同样,使用datetime.now()方法可以获取到当前时间

🚩上面这些代码,大家自己尝试运行,这里不做演示了,so easy

现在我们知道如何使用datetime模块创建时间,但是有些时候我们可能需要将datetime类型转成字符串样式。

例如:将字符串类型的Aug-23-19 20:13转化成2019-08-23 20:13:00样式的datetime类型。

import datetime
strp = datetime.datetime.strp
time('may-23-19 20:13', '%b-%d-%y %H:%M')
print(strp)

✨效果
2019-05-23 20:13:00

有的小伙伴会问道:“datetime.datetime(2019, 9, 9, 13, 14, 20)输出的的结果不就是2019-9-9 13:14:20吗?为什么还需要变?”。
没错,它的结果就是我们想要的样式,但是,需要注意的是它的类型是datetime,并不是str。

如果我们只是单一的想改变类型,就可以使用强制类型转换:

import datetime
date_time = datetime.datetime(2019, 9, 9, 13, 14, 20)
print(type(date_time))
str_date_time = str(date_time)
print(str_date_time)
print(type(str_date_time))

✨效果

<class ‘datetime.datetime’>
2019-09-09 13:14:20
<class ‘str’>

但是,我想提一个需求:将datetime.datetime(2019, 9, 9, 13, 14, 20)转换成9/9/2019 13:14样式的字符串。

2️⃣strftime()方法


莫慌,使用strftime()方法便可解决

import datetime
date_time = datetime.datetime(2019, 9, 9, 13, 14, 20)
str_time = date_time.strftime('%m/%d/%Y %H:%M')
str_time

关于时间格式的汇总如下图:

时间序列数据挖掘中的聚类研究综述 时间序列数据收集_数据


那么如何将str类型转化成datetime类型。

3️⃣strptime()方法

例如:将字符串类型的Aug-23-19 20:13转化成2019-08-23 20:13:00样式的datetime类型。 同理,使用strptime()方法。

import datetime
strp = datetime.datetime.strptime('Aug-23-19 20:13', '%b-%d-%y %H:%M')
print(strp)
print(type(strp))

🚩strptime()方法的作用是字符串时间转化为datetime格式,需要注意的是按一定的格式输出时间。
例如:第二个参数不可写成%B-%d-%Y %H:%M ,或者%b / %d / %Y %H:%M

Pandas时间序列基础

前面我们了解了Python内置的datetime模块对时间和日期的处理方法,接下来我们看一下Pandas处理时间上有哪些方法。

使用Pandas的date_range()方法可以快速创建出一个日期范围。

pd.date_range(start=None,end=None,periods=None,freq="D")
  1. start:日期范围的开始;
  2. end:日期范围的结束;
  3. periods:固定日期的个数;
  4. freq:日期偏移量,取值为string,
    默认为’D’,即:一天为日期偏移量
import pandas as pd
import time 
#使用start和periods以及默认的频率参数创建:
dat = pd.date_range(start='20010919', periods=10, freq="D")
#使用start和end以及频率参数freq为10天创建:
date = pd.date_range(start='20190808', end='20190921', freq="10D")
print(date)
print(dat)

✨效果

时间序列数据挖掘中的聚类研究综述 时间序列数据收集_pandas_02


start和end以及freq配合能够生成start和end范围内以频率freq的一组时间索引。

start和periods以及freq配合能够生成从start开始的频率为freq的periods个时间索引。

关于频率的更多缩写:

时间序列数据挖掘中的聚类研究综述 时间序列数据收集_时间序列数据挖掘中的聚类研究综述_03

有时候我们会对一天或者一个月的数据进行分析,这就需要我们将时间设置成数据的索引,然后通过时间索引获取到一定时间范围内的数据进行分析。

现在我们创建一个以时间序列为索引的Series数据。

import pandas as pd
time_index = pd.date_range('2019-01-01', periods=365)
print(time_index)

然后,使用numpy的随机数创建365个随机整数:

import numpy as np
time_data = np.random.randint(100,size=365)

最后,创建出以时间序列为索引的Series数据,运行下方代码,产看数据:

import pandas as pd
import numpy as np
time_index = pd.date_range('2019-01-01', periods=400)
time_data = np.random.randint(100,size=400)
date_time = pd.Series(data=time_data,index=time_index)
print(date_time)

✨效果

时间序列数据挖掘中的聚类研究综述 时间序列数据收集_数据_04

现在已经成功创建出数据,并将时间索引值设置成数据的索引项,接下来的重点是如何根据时间序列索引获取数据呢?
可以依据年份进行索引:

date_time['2020']

可以依据年和月进行索引:

date_time['2019-10']

可以使用时间戳进行切片获取数据

date_time['2019-10-05':'2019-10-10']

🚩在获取数据的时候可以直接使用字符串的形式获取以及切片操作。
有的时候用csv导入到时间数据时,默认的是字符串的数据类型 ,当可视化的时候,会出现没有按时间先后顺序的方式绘图 ,所以需要将字符串解析为时间类型的数据类型。

pd.to_datetime(arg,format=None)
  1. arg:需要修改的数据
  2. format:数据的格式
  3. to_datetime()方法会将字符串类型的是时间转换成Timestamp(‘2019-10-05 00:00:00’)时间戳类型。

✨效果

时间序列数据挖掘中的聚类研究综述 时间序列数据收集_数据分析_05


如果想对时间格式修改,还可以使用to_pydatetime()方法将Timestamp类型转换成datetime类型。

pd.to_datetime('2019-10-05').to_pydatetime()

需要注意的是字符串日期中包含中文,我们可以这样处理:

pd.to_datetime('2019年10月10日',format='%Y年%m月%d日')

像这种花里胡哨的方法很多,大家自行尝试吧