python数据分析:关于时间序列的问题

简介: 文章目录前言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)

✨效果

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

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

关于频率的更多缩写:

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

现在我们创建一个以时间序列为索引的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)
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)

效果

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

可以依据年份进行索引

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’)时间戳类型。

✨效果

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

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

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

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

相关文章
|
24天前
|
机器学习/深度学习 数据可视化 算法
使用Python进行数据分析:从零开始的指南
【10月更文挑战第9天】使用Python进行数据分析:从零开始的指南
35 1
|
6天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
24 0
|
22天前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
58 2
11种经典时间序列预测方法:理论、Python实现与应用
|
7天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
20 1
|
13天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
19 2
|
14天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
32 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
23天前
|
存储 编译器 索引
Python 序列类型(2)
【10月更文挑战第8天】
Python 序列类型(2)
|
12天前
|
数据采集 机器学习/深度学习 数据可视化
深入浅出:用Python进行数据分析的入门指南
【10月更文挑战第21天】 在信息爆炸的时代,掌握数据分析技能就像拥有一把钥匙,能够解锁隐藏在庞大数据集背后的秘密。本文将引导你通过Python语言,学习如何从零开始进行数据分析。我们将一起探索数据的收集、处理、分析和可视化等步骤,并最终学会如何利用数据讲故事。无论你是编程新手还是希望提升数据分析能力的专业人士,这篇文章都将为你提供一条清晰的学习路径。
|
21天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据处理与可视化——以气温数据分析为例
【10月更文挑战第12天】使用Python进行数据处理与可视化——以气温数据分析为例
150 0
|
21天前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
15 0