【数据分析师_04_Python数据分析基础】001-008_Pandas时序分析【汇总版】(日期索引,重新采样,时间序列,节假日,统一时间格式,Period,时区转换,Shift数据移动)


转载请注明出处 😃!
手动反爬:Pandas时序分析【汇总版】(日期索引,重新采样,时间序列,节假日,统一时间格式,Period,时区转换,Shift数据移动)
https://blog.csdn.net/Lyun911/article/details/112688801

注:以下使用 Jupyter Notebook 演示


1 Pandas的 DatetimeIndex

DatetimeIndex 是什么

从本地文件中加载一系列数据,如果其中一列是日期数据,DataFrame 加载后,日期数据默认是一个 object (可以看成是 str)类型的 “列”

如果想要将该列设置为索引,并且是时间戳索引的话,可以用到 pd.DatetimeIndex() 的方法。pd.DatetimeIndex() 的作用,是将一组数据转换为时间戳索引变成时间索引后的列会具有时间相关的特色属性,例如直接按年按月进行访问等

用到的Demo

csv文件中含:日期、开盘价、最高价、最低价、收盘价、交易量
在这里插入图片描述

1.1 使用 datetimeindex

加载 csv文件,并将时间设置为 Index:

import pandas as pd

df = pd.read_csv('aapl.csv')

# 加载时间序列
df = pd.read_csv(
    'aapl.csv',
    parse_dates = ['Date'],		# 识别 'Date' 列为日期格式parse_dates
    index_col = 'Date'			# 把 Date设置为索引
)

datetimeindex的使用:

# 可以直接根据 年/月/日 进行筛选:
df.loc['2017'].head()
df.loc['2017-01'].head()
df.loc['2017-06-05']
df.loc['2017-06']['Close'].mean()
df.loc['2017-06-15':'2017-05-15']['Close'].mean()

在这里插入图片描述

1.2 使用 .ReSampling 重采样功能

# 重新采样器:resample按照月'M'进行,计算平均值 mean
df.Close.resample('M').mean().head(16)

# 用绘图的工具包画一张图,包含每一天的数据
%matplotlib inline
df.Close.plot()

# 把按周进行平均之后绘图
df.Close.resample('W').mean().plot()

在这里插入图片描述

2 pd.date_range() 时间序列

什么是 Date_range

Pandas 中的 .date_range() 函数用来生成一个日期序列,在需要构造一个日期序列的时候非常方便

用到的 DEMO:
在这里插入图片描述

import pandas as pd
df = pd.read_csv("aapl_no_dates.csv")
df.head()

在这里插入图片描述

2.1 .date_range() 生成时间序列,作为 index

pd.date_range() 生成时间序列,作为 index:

# 生成一整段时间(按天)
rng = pd.date_range(
    start = '6/1/2016',
    end = '6/30/2016'
)

# freq = 'B' 生成按工作日的时间序列
rng = pd.date_range(
    start = '6/1/2016',
    end = '6/30/2016',
    freq = 'B'
)

# 设置 rng为 index
df.set_index(rng, inplace = True)

在这里插入图片描述

2.2 .date_range() 生成一定间隔的时间序列

pd.date_range()

方法1:

rng2 = pd.date_range(
    start = '6/1/2016',
    end = '11/30/2016',
    freq = 'M')			# 生成按:年Y/月M/日D/12小时12H/3小时3H 的时间序列
rng2

在这里插入图片描述
方法2:

rng = pd.date_range(
    start = '2016-07-01',
    periods = 70,		# 往后70天
    freq = 'H'			# 以小时为间隔
)
rng[0:25]				# 太多了,只显示一部分

在这里插入图片描述
把生成的数据做成图表

import numpy as np

ts = pd.Series(
    np.random.randint(0, 10, len(rng)),# 生成0-10之间的整数,生成len(rng)个数据
    index = rng# 以 rng为索引
)

df2 = pd.DataFrame(ts)
df2['2016-07-01 07:00:00':'2016-07-01 12:00:00'].
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值