Travel Tips
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
核心pandas介绍
datetime模块,主要掌握:datetime.date(), datetime.datetime(), datetime.timedelta()
日期解析方法:parser.parse
import datetime # 也可以写 from datetime import date today = datetime.date.today() print(today,type(today)) print(str(today),type(str(today))) # datetime.date.today 返回今日 # 输出格式为 date类 t = datetime.date(2016,6,1) print(t) # (年,月,日) → 直接得到当时日期
now = datetime.datetime.now() print(now,type(now)) print(str(now),type(str(now))) # .now()方法,输出当前时间 # 输出格式为 datetime类 # 可通过str()转化为字符串 t1 = datetime.datetime(2016,6,1) t2 = datetime.datetime(2014,1,1,12,44,33) print(t1,t2) # (年,月,日,时,分,秒),至少输入年月日 t2-t1 # 相减得到时间差 —— timedelta
today = datetime.datetime.today() # datetime.datetime也有today()方法 yestoday = today - datetime.timedelta(1) # print(today) print(yestoday) print(today - datetime.timedelta(7)) # 时间差主要用作时间的加减法,相当于可被识别的时间“差值”
from dateutil.parser import parse date = '12-21-2017' t = parse(date) print(t,type(t)) # 直接将str转化成datetime.datetime print(parse('2000-1-1'),'\n', parse('5/1/2014'),'\n', parse('5/1/2014', dayfirst = True),'\n', # 国际通用格式中,日在月之前,可以通过dayfirst来设置 parse('22/1/2014'),'\n', parse('Jan 31, 1997 10:45 PM')) # 各种格式可以解析,但无法支持中文
时刻数据代表时间点,是pandas的数据类型,是将值与时间点相关联的最基本类型的时间序列数据
pandas.Timestamp() # pd.Timestamp() import numpy as np import pandas as pd date1 = datetime.datetime(2016,12,1,12,45,30) # 创建一个datetime.datetime date2 = '2017-12-21' # 创建一个字符串 t1 = pd.Timestamp(date1) t2 = pd.Timestamp(date2) print(t1,type(t1)) print(t2) print(pd.Timestamp('2017-12-21 15:00:22')) # 直接生成pandas的时刻数据 → 时间戳 # 数据类型为 pandas的Timestamp
from datetime import datetime date1 = datetime(2016,12,1,12,45,30) date2 = '2017-12-21' t1 = pd.to_datetime(date1) t2 = pd.to_datetime(date2) print(t1,type(t1)) print(t2,type(t2)) # pd.to_datetime():如果是单个时间数据,转换成pandas的时刻数据,数据类型为Timestamp lst_date = [ '2017-12-21', '2017-12-22', '2017-12-23'] t3 = pd.to_datetime(lst_date) print(t3,type(t3)) # 多个时间数据,将会转换为pandas的DatetimeIndex
date1 = [datetime(2015,6,1),datetime(2015,7,1),datetime(2015,8,1),datetime(2015,9,1),datetime(2015,10,1)] date2 = ['2017-2-1','2017-2-2','2017-2-3','2017-2-4','2017-2-5','2017-2-6'] print(date1) print(date2) t1 = pd.to_datetime(date2) t2 = pd.to_datetime(date2) print(t1) print(t2) # 多个时间数据转换为 DatetimeIndex date3 = ['2017-2-1','2017-2-2','2017-2-3','hello world!','2017-2-5','2017-2-6'] t3 = pd.to_datetime(date3, errors = 'ignore') print(t3,type(t3)) # 当一组时间序列中夹杂其他格式数据,可用errors参数返回 # errors = 'ignore':不可解析时返回原始输入,这里就是直接生成一般数组 t4 = pd.to_datetime(date3, errors = 'coerce') print(t4,type(t4)) # errors = 'coerce':不可扩展,缺失值返回NaT(Not a Time),结果认为DatetimeIndex
核心:pd.date_range()
rng = pd.DatetimeIndex(['12/1/2017','12/2/2017','12/3/2017','12/4/2017','12/5/2017']) print(rng,type(rng)) print(rng[0],type(rng[0])) # 直接生成时间戳索引,支持str、datetime.datetime # 单个时间戳为Timestamp,多个时间戳为DatetimeIndex st = pd.Series(np.random.rand(len(rng)), index = rng) print(st,type(st)) print(st.index) # 以DatetimeIndex为index的Series,为TimeSries,时间序列
# 2种生成方式:①start + end; ②start/end + periods
# 默认频率:day
rng1 = pd.date_range('1/1/2017','1/10/2017', normalize=True) rng2 = pd.date_range(start = '1/1/2017', periods = 10) rng3 = pd.date_range(end = '1/30/2017 15:00:00', periods = 10) # 增加了时、分、秒 print(rng1,type(rng1)) print(rng2) print(rng3) print('-------') # 直接生成DatetimeIndex # pd.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs) # start:开始时间 # end:结束时间 # periods:偏移量 # freq:频率,默认天,pd.date_range()默认频率为日历日,pd.bdate_range()默认频率为工作日 # tz:时区 rng4 = pd.date_range(start = '1/1/2017 15:30', periods = 10, name = 'hello world!', normalize = True) print(rng4) print('-------') # normalize:时间参数值正则化到午夜时间戳(这里最后就直接变成0:00:00,并不是15:30:00) # name:索引对象名称 print(pd.date_range('20170101','20170104')) # 20170101也可读取 print(pd.date_range('20170101','20170104',closed = 'right')) print(pd.date_range('20170101','20170104',closed = 'left')) print('-------') # closed:默认为None的情况下,左闭右闭,left则左闭右开,right则左开右闭 print(pd.bdate_range('20170101','20170107')) # pd.bdate_range()默认频率为工作日 print(list(pd.date_range(start = '1/1/2017', periods = 10))) # 直接转化为list,元素为Timestamp
print(pd.date_range('2017/1/1','2017/1/4')) # 默认freq = 'D':每日历日 print(pd.date_range('2017/1/1','2017/1/4', freq = 'B')) # B:每工作日 print(pd.date_range('2017/1/1','2017/1/2', freq = 'H')) # H:每小时 print(pd.date_range('2017/1/1 12:00','2017/1/1 12:10', freq = 'T')) # T/MIN:每分 print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'S')) # S:每秒 print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'L')) # L:每毫秒(千分之一秒) print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'U')) # U:每微秒(百万分之一秒) print(pd.date_range('2017/1/1','2017/2/1', freq = 'W-MON')) # W-MON:从指定星期几开始算起,每周 # 星期几缩写:MON/TUE/WED/THU/FRI/SAT/SUN print(pd.date_range('2017/1/1','2017/5/1', freq = 'WOM-2MON')) # WOM-2MON:每月的第几个星期几开始算,这里是每月第二个星期一
print(pd.date_range('2017','2018', freq = 'M')) print(pd.date_range('2017','2020', freq = 'Q-DEC')) print(pd.date_range('2017','2020', freq = 'A-DEC')) print('------') # M:每月最后一个日历日 # Q-月:指定月为季度末,每个季度末最后一月的最后一个日历日 # A-月:每年指定月份的最后一个日历日 # 月缩写:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC # 所以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:每月第一个工作日 # BQ-月:指定月为季度末,每个季度末最后一月的第一个工作日 # BA-月:每年指定月份的第一个工作日
print(pd.date_range('2017/1/1','2017/2/1', freq = '7D')) # 7天 print(pd.date_range('2017/1/1','2017/1/2', freq = '2h30min')) # 2小时30分钟 print(pd.date_range('2017','2018', freq = '2M')) # 2月,每月最后一个日历日
ts = pd.Series(np.random.rand(4), index = pd.date_range('20170101','20170104')) print(ts) print(ts.asfreq('4H',method = 'ffill')) # 改变频率,这里是D改为4H # method:插值模式,None不插值,ffill用之前值填充,bfill用之后值填充
ts = pd.Series(np.random.rand(4), index = pd.date_range('20170101','20170104')) print(ts) print(ts.shift(2)) print(ts.shift(-2)) print('------') # 正数:数值后移(滞后);负数:数值前移(超前) per = ts/ts.shift(1) - 1 print(per) print('------') # 计算变化百分比,这里计算:该时间戳与上一个时间戳相比,变化百分比 print(ts.shift(2, freq = 'D')) print(ts.shift(2, freq = 'T')) # 加上freq参数:对时间戳进行位移,而不是对数值进行位移
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Donec in ullamcorper quam. Aenean vel nibh eu magna gravida fermentum. Praesent eget nisi pulvinar, sollicitudin eros vitae, tristique odio.
December 4, 2020 at 3:12 pm
我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum
Rosie
6 minutes ago