时间序列数据分析
类型 | 使用说明 |
---|---|
date | 日期(年、月、日) |
time | 时间(时、分、秒、毫秒) |
datetime | 日期和时间 |
timedelta | 两个datetime的差(日、秒、毫秒) |
txinfo | 用于存储时区信息的基本类型 |
导包
import datetime
datetime
datetime.date(2020, 1, 1)
datetime.date(2020, 1, 1)
datetime.time(11, 11, 11)
datetime.time(11, 11, 11)
# 查看当前时间
datetime.datetime.now()
datetime.datetime(2020, 7, 6, 16, 12, 44, 196492)
now = datetime.datetime.now()
birth = datetime.datetime(2000, 1, 1)
delta = now - birth
print (delta)
new = birth + datetime.timedelta(120)
print (new)
7492 days, 16:16:15.651126
2000-04-30 00:00:00
数据转换
类型 | 描述 |
---|---|
%Y | 四位的年份 |
%y | 两位的年份 |
%m | 两位的月份 |
%d | 两位的日期 |
%H | 小时,24制 |
%I | 小时,12制 |
%M | 两位的分钟 |
%S | 两位的秒 |
%W | 每年的第几周 |
%F | %M-%m-%d的简写(2020-7-06) |
%D | %m/%d/%y的简写(20/7/06)```python |
datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S")
‘20-07-06 16:34:20’
datetime.datetime.strptime('2020-01-01 0:0:0', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2020, 1, 1, 0, 0)
重采样、降采样、升采样
Pandas中的resample函数用于各种频率转换工作。
参数 | 描述 |
---|---|
freq | 转换频率 |
axies=0 | 重采样的轴 |
closed=“right” | 在降采样中,设置个时间段哪端是闭合的 |
label=“right” | 在降采样中,如何设置聚合值的标签 |
loffset=None | 设置时间偏移 |
kind=None | 聚合到时期,默认为时间序列的索引类型 |
convention | 升采样采用的约定(start或end),默认为end |
rule | effect |
---|---|
B | 工作日频率 |
C | 定制营业日频率(实验) |
D | 日历日频率 |
W | 每周一次的频率 |
M | 月末频率 |
BM | 业务月末频度 |
CBM | 定制业务月底频度 |
MS | 月启动频率 |
BMS | 业务月开始频率 |
CBMS | 自定义业务月启动频率 |
Q | 四分之一端频率 |
BQ | 业务季度末频率 |
QS | 四分之一起动频率 |
BQS | 季度开始频率 |
A | 年末频率 |
BA | 营业年度结束频率 |
AS | 作为年初频率 |
BAS | 业务年度开始频率 |
BH | 营业时间 |
H | 每小时的频率 |
T | 每分钟的频率 |
S | 年代第二频率 |
L | milliseonds |
U | 微秒 |
N | 纳秒 |
w = pd.date_range(start='2000/1/1',periods=100, freq='D')
y = pd.Series(np.arange(100), index=w)
print (y.head(8))
ps = y.resample('M').mean()
print (ps)
# 降低采样频率为三分钟
index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index)
series
# 降低采样频率为三分钟,但是每个标签使用right来代替left。请注意,bucket中值的用作标签。
series.resample('3T').sum()
# 降低采样频率为三分钟,但是关闭right区间。
series.resample('3T', label='right').sum()
# 增加采样频率到30秒
series.resample('3T', label='right', closed='right').sum()
# 增加采样频率到30S,使用pad方法填充nan值
series.resample('30S').asfreq()[0:5] #select first 5 rows
# 增加采样频率到30S,使用bfill方法填充nan值。
series.resample('30S').pad()[0:5]
# 通过apply运行一个自定义函数
series.resample('30S').bfill()[0:5]