知知知…
有一说一,重采样与窗口函数部分完全看不懂!!(哭…)
简单地记录一下前两部分的学习吧(嘻嘻…)
一、时间点的创建
-
to_datetime方法
这个方法的包容性很大,可以有很多种(有限)建立起时间点 -
使用 to_datetime 方法与 format 格式化函数
加上format函数后,甚至可以为所欲为的建立时间点 -
可将时间点作为索引创建一个列表
-
date_range方法
主要参数有四个start/end/periods(时间点个数)/freq(间隔方法) -
bdate_range方法与上一个方法基本相同,它主要是提供了 freq 中有一个特殊的’C’/‘CBM’/'CBMS’选项,表示定制,需要联合weekmask参数和holidays参数使用
-
DateOffset对象
Timedelta绝对时间差的特点指无论是冬令时还是夏令时,增减1day都只计算24小时
DataOffset相对时间差指,无论一天是23\24\25小时,增减1day都与当天相同的时间保持一致
把 tz(time zone)去除,就能解除时区带来的烦恼!!!
二、时序的索引及属性
-
索引切片
大概就是建立一个以时间点为索引的Series,而这个索引是可以以切片,间隔等形式给出 -
子集索引
在读取数据时,类似一种模糊索引吧 比如对于一个年月日的索引,读取一个年月的索引,就能把这个月里的所有日对应的信息都展现出来 -
时间点的属性
采用dt对象可以轻松获得关于时间的信息,dt这东西吧类似于Series的内置方法str 一样,dt是关于时间信息的内置方法(类),它能访问有关于周,日的具体信息
题题题…
【问题一】 如何对date_range进行批量加帧操作或对某一时间段加大时间戳密度?
可尝试加大 periods 参数或以更小的时间间隔 frq 来分隔
# periods = 3
print(pd.date_range(start='2020/12/23',end='2020/12/24', periods=3))
'''
DatetimeIndex(['2020-12-23 00:00:00', '2020-12-23 12:00:00',
'2020-12-24 00:00:00'],
dtype='datetime64[ns]', freq=None)
'''
# 增大periods = 9
print(pd.date_range(start='2020/12/23',end='2020/12/24', periods=9))
'''
DatetimeIndex(['2020-12-23 00:00:00', '2020-12-23 03:00:00',
'2020-12-23 06:00:00', '2020-12-23 09:00:00',
'2020-12-23 12:00:00', '2020-12-23 15:00:00',
'2020-12-23 18:00:00', '2020-12-23 21:00:00',
'2020-12-24 00:00:00'],
dtype='datetime64[ns]', freq=None)
'''
# 以 D(天)为时间间隔
print(pd.date_range(start='2020/12/23', end='2020/12/24', freq='D'))
'''
DatetimeIndex(['2020-12-23', '2020-12-24'], dtype='datetime64[ns]', freq='D')
'''
# 以 T(每小时)为时间间隔
print(pd.date_range(start='2020/12/23', end='2020/12/24', freq='T'))
'''
DatetimeIndex(['2020-12-23 00:00:00', '2020-12-23 00:01:00',
'2020-12-23 00:02:00', '2020-12-23 00:03:00',
'2020-12-23 00:04:00', '2020-12-23 00:05:00',
'2020-12-23 00:06:00', '2020-12-23 00:07:00',
'2020-12-23 00:08:00', '2020-12-23 00:09:00',
...
'2020-12-23 23:51:00', '2020-12-23 23:52:00',
'2020-12-23 23:53:00', '2020-12-23 23:54:00',
'2020-12-23 23:55:00', '2020-12-23 23:56:00',
'2020-12-23 23:57:00', '2020-12-23 23:58:00',
'2020-12-23 23:59:00', '2020-12-24 00:00:00'],
dtype='datetime64[ns]', length=1441, freq='T')
'''
【问题二】 如何批量增加TimeStamp的精度?
增加精度不难 在建立时间点的时候,秒数的后面至多可以写到纳秒级别
print(pd.to_datetime('2020 12 22 00:00:00.000000010'))
'''
2020-12-22 00:00:00.000000010
'''
至于批量处理…
【问题三】 对于超出处理时间的时间点,是否真的完全没有处理方法?
官方文档提示:If you have data that is outside of the Timestamp bounds,see Timestamp limitations,then you can use a Periodlndex andor Series of Periods to do computations.
【问题四】 给定一组非连续的日期,怎么快速找出位于其最大日期和最小日期之间,且没有出现在该组日期中的日期?
time = pd.date_range(start='2020/12/23', end='2020/12/31', periods=3)
print(time)
'''
DatetimeIndex(['2020-12-23', '2020-12-27', '2020-12-31'], dtype='datetime64[ns]', freq=None)
'''
print(time.max(), time.min()) # 2020-12-31 00:00:00 2020-12-23 00:00:00
time1 = pd.date_range(start=str(time.min()), end=str(time.max()), freq='D')
print(time1[~time1.isin(time)])
'''
DatetimeIndex(['2020-12-24', '2020-12-25', '2020-12-26', '2020-12-28',
'2020-12-29', '2020-12-30'],
dtype='datetime64[ns]', freq=None)
'''
【练习一】 现有一份关于某超市牛奶销售额的时间序列数据,请完成下列问题:
df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\time_series_one.csv')
print(df.head())
'''
日期 销售额
0 2017/2/17 2154
1 2017/2/18 2095
2 2017/2/19 3459
3 2017/2/20 2198
4 2017/2/21 2413
'''
(a)销售额出现最大值的是星期几?(提示:利用dayofweek函数)
好的,就用 dayofweek 函数呢
df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\time_series_one.csv')
# print(df.head())
s = df['日期'][df['销售额'] == df['销售额'].max()] # 取出时间点的序列
print(pd.to_datetime(s.iloc[0]).dayofweek) # s.iloc[0]读出序列的绝对索引的第一个值,即时间点
# 6
剩下的可难了呢(哼)