Pandas的时序分析
转载请注明出处 😃!
手动反爬: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'].