数据分析师-pandas时间模块datetime

主要:datetime.date()、datetime.datetime()、datetime.timedelta()

日期解析方法:parser.parse

一、时间模块 import datetime

1.datetime.date:date对象,date是datetime中的方法

(1)datetime.date.today()#today()会根据日期的变化输出今天的日期,返回的是datetime.date类,例如:想把一个月数据聚合成四周的产量--如果是str需要手动按照七天间隔,而datetime.date可以直接用来做

(2)datetime.date(2018,10,1)

2.datetime.datetime:直接生成时间戳

(1)datetime.datetime.now()#返回今天的年月日时分秒,返回的是datetime.datetime类

(2)datetime.datetime类相减得到相差的时间,返回的是datetime.timedelta时间差类

3.datetime.timedelta:时间差,默认是天

datetime.timedelta(100,3600)#时间差为100天+3600秒

4.日期和字符串转换方法:parser.parse,可以识别任何相似于时间的字符串

from dateutil.parser import parse

print(parse('2000-11-1'))

print(parse('11/11/2000'))

print(parse('5/1/2018',dayfirst = True))#dayfirst为True可以设置日在月之前

print(parse('Jan 31,1997 10:45PM'))

#各种格式都可以判断,但不能出现中文

二、pandas里的时刻数据:pd.Timestamp

1. 时刻数据代表时间点,是pd的数据类型;pd.Timestamp():时间点可以是一个月 一分钟 一秒,直接生成pandas的时刻数据--即时间戳,类型为pandas.Timestamp

注意:只适用于单个时间

2.pd.to_datetime():多个时间数据转换时间戳索引pandas的DatetimeIndex,单个时间数据转换成Timestamp

t3 = ['2017-10-20','2017-10-20','2017-10-20','2017-10-20']

(1)当为多个时间数据时,返回DatetimeIndex时间序列标签类,可以变成Series的index

(2)当一组时间序列中有其他格式数据,会报错;也可以用errors='ignore'参数返回原始输入,生成一般的数组;errors='coerce'参数返回datetimeIndex,并变为缺失值NaT

(3)print(pd.Timestamp(t3),type(t3))#会报错

三、pandas时戳索引

pd.DatetimeIndex()时间戳索引:直接把时间序列变成时间戳索引

rng[0]#按照索引生成时间戳Timestamp

** TimeSeries时间序列:以DatetimeIndex的index的Series,为TimeSeries,时间序列

四、pd.date_range()日期范围/工作日pd.bdate_range

pd.date_range(start开始时间,end结束时间,periods时期,freq默认频率day,normalize=True把时间归为凌晨零点)

2种生成方式:start+end or start/end+periods

例如:rng1 = pd.date_range('1/1/2017','1/10/2017')

rng2 = pd.date_range(start = '1/1/2017',periods =10,freq = 'H')#freq='H'按小时

print(pd.date_range('1/1/2017','1/11/2017',closed='right'))closed:默认为左闭右闭;left为左闭右开;right为左开右闭

注意:由于date_range返回的是DatetimeIndex类,当被list后返回的是一个个的时间戳Timestamp(pandas中精度最小的时间单位)

五、afreq:时期频率的转换

ts = pd.Series(np.random.rand(4),index=pd.date_range('20170101','20170104'))

print(ts.asfreq('4H',method='ffill'))#method参数:插值 ffill用之前的填充 bfill用之后的填充

六、pd.date_range()超前和滞后

ts = pd.Series(np.random.rand(4),index=pd.date_range('20170101','20170104'))

print(ts.shift(2))#.shift(正数):向后移

print(ts.shift(-2))#.shift(负数):向前移

#意义:比如有十天的营收数据,想看当天比前一天的涨跌情况,得到的负数就是跌了,正数就是涨了

per  = ts/ts.shift(1)-1

#加上freq参数,多时间戳进行位移,而不仅对数值进行位移=D按照天,=T按照小时

print(ts.shift(2,freq = 'D'))、print(ts.shift(2,freq = 'T'))

七、pandas的时期pd.period()

1.pd.Period() 类似于DatatimeIndex时间戳:

p = pd.Period('2017',freq='M')生成以2017-01开始,月为频率的时间构造器;freq指明period长度,时间戳则说明该period在时间轴上的位置

注意:print(p+1)#按照freq进行运算

2.pd.period_range()类似于date_range()时间戳

prng = pd.period_range('1/1/2011','1/1/2013',freq='M')生成的按月 2011-01,数据格式为PeriodIndex,单个数值为Period

rng = pd.date_range('1/1/2011','1/1/2013',freq='M')生成的按天2011-01-01

3.asfreq频率转换

p = pd.Period('2017','A-DEC')--每年制定月份的最后一个日历日所在的年,变为M/D

print(p.asfreq('M',how='start'))#how参数=start以开始,=end以结束 print(p.asfreq('D',how='end'))

ts2 = pd.Series(np.random.rand(len([prng])),

              index=prng.asfreq('D',how='end'))#asfreq也可以转换TimeSeries的index

4.时间戳DatatimeIndex与时期Period的转换:pd.to_period()/pd.timestamp()

ts1.to_period()、ts2.to_timestamp()

八、时间序列的重采样

将时间序列的一个频率转换成另一个频率,且会有数据的结合

降采样:高频数据-低频数据,eg以天为频率的数据转换为以月为频率的数据

升采样:低频数据-高频数据,eg以年为频率的数据转换为以月为频率的数据 

1.降采样:需要聚合

ts.resample('5D') #得到重采样的构建器DatetimeIndexResampler,是个中间值,需要指示聚合方式,频率为5天

ts_re2 = ts.resample('5D',closed='left',label='right').sum()#重采样的最终值,得到聚合后的Series;

label:重采样后以那个标签为索引,默认写left;closed:默认左闭右闭

聚合方法:

print(ts.resample('5D').sum())#均值

print(ts.resample('5D').max())#最大值

print(ts.resample('5D').min())#最小值

print(ts.resample('5D').median())#中值

print(ts.resample('5D').first())#第一个值

print(ts.resample('5D').last())#第二个值

print(ts.resample('5D').ohlc())#OHLC重采样:open开盘 high最大值 low最小值 close收盘-金融

2.升采样:需要填充

ts.resample('15T').asfreq() #不做填充,返回NaN

ts.resample('15T').ffill()/bfill():上填充和下填充

九、时间序列中的索引和切片

1.索引:方法与DataFrame和Series相似--只要能表示时间的都可以拿来做标签的索引下标索引和标签索引

2.切片:下标切片,类似Series,左闭右开;标签切片,左闭右闭;#标签切片只写月会出现月的所有日

3.重复索引的时间序列 .is_unique值是否唯一,index.is_unique判断index是否唯一,返回True和False,可以用来做布尔型索引

总结:pandas的时间模块

pd.Timestamp():单数据时间戳

pd.to_datetime():多数据的时间戳

pd.DatatimeIndex():多数据的时间戳,可以作为Series的index;还可以索引

在没有现成时间数据情况下:pd.date_range()日期范围

附:pd.date_range():日期范围一讲,频率freq

# print(pd.date_range('2017/1/1','2017/1/4'))#默认freq='D',每日历日

# print(pd.date_range('2017/1/1','2017/1/4',freq='B'))#freq='B',每工作日

# print(pd.date_range('2017/1/1','2017/1/4',freq='H'))#freq='H',每小时

# print(pd.date_range('2017/1/1 12:00','2017/1/4 12:10',freq='T'))#freq='T/MIN',每分钟

# print(pd.date_range('2017/1/1 12:00:00','2017/1/4 12:10:10',freq='S'))#freq='S',每秒

# print(pd.date_range('2017/1/1 12:00','2017/1/4 12:10',freq='L'))#freq='L',每毫秒

# print(pd.date_range('2017/1/1 12:00','2017/1/4 12:10',freq='U'))#freq='U',每微秒

print(pd.date_range('2017/1/1','2017/1/4',freq='W-MON'))

# W-MON从指定星期几开始算起,每周

print(pd.date_range('2017/1/1','2018/1/4',freq='WOM-2MON'))

# WOM-nMON,每月的第几个星期几开始算

# 时间序列:DatimeIndex与TimeSeries

pd.date_range()-日期范围二讲,频率

print(pd.date_range('2017','2018',freq='M'))

print(pd.date_range('2017','2020',freq='Q-MAY'))

print(pd.date_range('2017','2018',freq='A-DEC'))

print('--'*20)

#M:每月最后一个日历日

#Q-月:指定月为季度末,每个季度末最后一月的最后一个日历日

#A-月:每年制定月份的最后一个日历日

#月编写:JAN

#所以Q-月只有三种情况:1-4-7-10,2-5-8-11,3-6-9-12

print(pd.date_range('2017','2018', freq = 'BM')) 

print(pd.date_range('2017','2020', freq = 'BQ-DEC')) 

print(pd.date_range('2017','2020', freq = 'BA-DEC'))

print('------')

# BM:每月最后一个工作日

# BQ-月:指定月为季度末,每个季度末最后一月的最后一个工作日

# BA-月:每年指定月份的最后一个工作日

print(pd.date_range('2017','2018', freq = 'MS')) 

print(pd.date_range('2017','2020', freq = 'QS-DEC')) 

print(pd.date_range('2017','2020', freq = 'AS-DEC'))

print('------')

# M:每月第一个日历日

# Q-月:指定月为季度末,每个季度末最后一月的第一个日历日

# A-月:每年指定月份的第一个日历日

print(pd.date_range('2017','2018', freq = 'BMS')) 

print(pd.date_range('2017','2020', freq = 'BQS-DEC')) 

print(pd.date_range('2017','2020', freq = 'BAS-DEC'))

print('------')

# BM:每月第一个工作日a

# BQ-月:指定月为季度末,每个季度末最后一月的第一个工作日

# BA-月:每年指定月份的第一个工作日

pd.date_range()-日期范围,复合频率

print(pd.date_range('2017/1/1','2017/2/1',freq='7D'))# 7天

print(pd.date_range('2017/1/1','2017/2/1',freq='2h30min'))# 2.5小时

print(pd.date_range('2017/1/1','2018/2/1',freq='2MS'))#每间隔2个月,每月第一个日历日

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • # -*- coding: utf-8 -*- from __future__ import division f...
    小豆角lch阅读 902评论 0 1
  • 昨天睡了一天,是头晕的那种,然后也没心思来做笔记,没心思来看书,其实,我知道,或许我现在做的只是在转移一种矛盾,可...
    六六的建斌阅读 814评论 0 0
  • 时间序列简介 时间序列分析是数据分析过程中,尤其是在金融数据分析过程中会经常遇到的。时间序列,就是以时间排序的一组...
    Alex_杨策阅读 1,726评论 0 1
  • 太忙,好久不写笔记了。这两天有空,把该整理的好好整理一下。 一、datetime库 2017-06-07 23:1...
    哈劳斯军士阅读 934评论 1 3
  • 老何一家是外地人,在S城市的郊区做小本生意。几年前他攒了点积蓄,在小赵村买了五间平方还带一个院子。没有想到几年后的...
    幡然一悟阅读 356评论 0 1