返回介绍

数学基础

统计学习

深度学习

工具

Scala

九、时间序列

发布于 2023-07-17 23:38:23 字数 36366 浏览 0 评论 0 收藏 0

  1. Pandas 提供了表示时间点、时间段、时间间隔等三种与时间有关的类型,以及元素为这些类型的索引对象。pandas还提供了许多与时间序列相关的函数。

1. Python 中的时间

  1. Python中,关于时间、日期处理的库有三个:timedatetimeCalendar。其中:datetime又有datetime.date/datetime.time/datetime.datetime三个类

1.1 时区

  1. 所有的时间都有一个时区。同样一个时间戳,根据不同的时区,它可以转换成不同的时间。
  2. pytz模块的common_timezones可以获取常用的表示时区的字符串。你可以通过pytz.timezone('timezone_str')来创建时区对象。 timezone

1.2 time 模块

  1. time模块中,时间有三种表现形式:

    • Unix时间戳。指的是从1970年以来的秒数
    • 本地时间的struct_time形式:一个命名元组,第一位为年、第二位为月....
    • UTC时间的struct_time的形式:类似于上面的,只是为UTC时间。区别在于:前者是本地时间local time,后者是UTC时间
  2. 查看当前时间的三种表现形式:

    • Unix时间戳: time.time()
    • local struct_timetime.localtime()
    • utc struct_timetime.gmtime()

    time_3kind_time

  3. 三种格式之间的转换:

    • timestamp--->local timetime.localtime(time_stamp)
    • timestamp--->utc timetime.gmtime(time_stamp)
    • local time--->timestamptime.mktime(local_time)
    • utc time---> timestampcalendar.timegm(utc_time)

    time_time_invert

  4. 三种格式的时间转换为字符串:

    • timestamptime.ctime(time_stamp)
    • local struct_time time/utc struct_time timetime.asctime(struct_time)
    • 对于local struct_time time/utc struct_time time:你也可以使用time.strftime(format_str,struct_time) 来自定义格式化串。其中format_str为格式化串。

    字符串转换为struct_timetime.strptime(time_str,format_str)。其中format_str为格式化串。 time_str_time

  5. 查看当前时区: time.timezone。它返回的是距离UTC时间的距离(单位为秒)(>0,在美洲;<=0,在大多数欧洲,亚洲,非洲)。你无法通过修改它的值来修改时区。time模块使用的是系统的时区。 time_timezone

1.3 datetime 模块

  1. datetime模块中主要包含四个类:

    • datetime.time:时间类。只包含时、分、秒、微秒等时间信息
    • datetime.date:日期类。值包含年月日星期等日期信息
    • datetime.datetime:日期时间类。包含上述两者的全部信息
    • datetime.timedelta:日期时间间隔类,用来表示两个datetime之间的差值。
  2. datetime.time的构造函数为:

    
    
    xxxxxxxxxx
    time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

    其中tzinfo就是时区对象。0<=hour<240<=minute<600<=second<600<=microsecond<1000000,否则抛出异常。tzinfo默认为None

属性有:

  • hour/minute/second/microsecond/tzinfo

方法有:

  • time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):替换对应的值,返回一个新的对象
  • time.isoformat():返回一个ISO 8601格式的字符串。
  • time.strftime(format):格式化datetime.time对象
  • time.tzname():如果时区为为None,则返回None。否则返回时区名称

datetime_time

  1. datetime.date的构造函数为:

    
    
    xxxxxxxxxx
    datetime.date(year, month, day)
    • month取值为[1,12]day取值为[1,num]num取决于指定的年和月有多少天

    类方法有:date.today()/date.fromtimestamp(timestamp)

    属性有:year/month/day

    方法有:

    • 运算:date1-date2date1+timedeltadate1-timedeltadate1<date2
    • date.replace(year,month,day):替换掉对应值,返回新对象
    • date.timetuple():返回一个time.struct_time类型的元组
    • date.weekday():返回代表星期几的数字。0为周日
    • date.isoweekday():返回代表星期几的数字。7为周日
    • date.isocalendar():返回一个元组(ISO year,IOS week num,ISO weekday)
    • date.isoformat():返回一个ISO 8601格式的字符串。
    • date.ctime():等价于time.ctime(time.mktime(d.timetuple()))
    • date.strftime(format):格式化datetime.date对象

    datetime_date

  2. datetime.datetime的构造函数为:

    
    
    xxxxxxxxxx
    datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

    类方法有:

    • datetime.today():返回当前的时间日期
    • datetime.now(tz=None):返回指定时区当前的时间日期。如果tz=None,则等价于datetime.today()
    • datetime.utcnow():返回当前的UTC时间日期
    • datetime.fromtimestamp(timestamp, tz=None):根据时间戳,创建指定时区下的时间日期。
    • datetime.utcfromtimestamp(timestamp):根据时间戳,创建UTC下的时间日期。
    • datetime.combine(date, time):从datetime对象中创建datetime
    • datetime.strptime(date_string, format):从字符串中创建datetime

    属性有:year/month/day/hour/minute/second/microsecond/tzinfo

    方法有:

    • 运算:datetime1-datetime2datetime1+timedeltadatetime1-timedeltadatetime1<datetime2
    • datetime.date():返回一个date对象
    • datetime.time():返回一个time对象(该timetzinfo=None
    • datetime.timetz():返回一个time对象(该timetzinfodatetimetzinfo
    • datetime.replace([year[, month[, day[, hour[, minute[, second [, microsecond[, tzinfo]]]]]]]]):替换掉指定值,返回新对象
    • datetime.astimezone(tz=None) :调整时区。如果tz=None,则默认采用系统时区。注意,调整前后的UTC时间是相同的。
    • datetime.tzname():返回时区名字
    • datetime.timetuple():返回一个time.struct_time这样的命名元组
    • datetime.utctimetuple():返回一个time.struct_time这样的命名元组,注意它是在UTC时间下的,而不是local time下的
    • datetime.timestamp():返回一个时间戳
    • datetime.weekday():返回代表星期几的数字。0为周日
    • datetime.isoweekday():返回代表星期几的数字。7为周日
    • datetime.isocalendar():返回一个元组(ISO year,IOS week num,ISO weekday)
    • datetime.isoformat(sep='T'):返回一个ISO 8601格式的字符串。
    • datetime.ctime():等价于time.ctime(time.mktime(d.timetuple()))
    • datetime.strftime(format):格式化datetime.datetime对象。

    注意:不能将tzinfo=Nonetzinfo!=None的两个datetime进行运算。

  3. 下面是常用的格式化字符串的定义:

    • '%Y':4位数的年
    • '%y':2位数的年
    • '%m':2位数的月 [01,12]
    • '%d':2位数的日 [01,31]
    • '%H':小时(24小时制)[00,23]
    • '%I':小时(12小时制)[01,12]
    • '%M':2位数的分[00,59]
    • '%S':秒[00,61]61秒用于闰秒
    • '%w':用整数表示的星期几[0,6],0 表示星期日
    • '%U':每年的第几周[00,53]。星期天表示每周的第一天。每年的第一个星期天之前的那几天被认为是第 0 周
    • '%W':每年的第几周[00,53]。星期一表示每周的第一天。每年的第一个星期一之前的那几天被认为是第 0 周
    • '%z':以+HHMM或者-HHMM表示的UTC时区偏移量。如果未指定时区,则返回空字符串。
    • '%F':以%Y-%m-%d简写的形式
    • '%D':以%m/%d/%y简写的形式
    • '%a':星期几的简称
    • '%A':星期几的全称
    • '%b':月份的简称
    • '%B':月份的全称
    • '%c':完整的日期和时间
    • '%q':季度[01,04]

    datetime_datetime

  4. timedelta代表一段时间。其构造:

    
    
    xxxxxxxxxx
    datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

    在内部,只存储秒、微秒。其他时间单位都转换为秒和微秒。

实例属性(只读):

  • days/seconds/microseconds

实例方法:

  • timedelta.total_seconds():返回总秒数。

datetime_timedelta

2. 时间点 Timestamp

  1. 时间点:Timestamp对象从Pythondatetime类继承,它表示时间轴上的一个点。

    
    
    xxxxxxxxxx
    pd.Timestamp(ts_input=<object object at 0x0000000001E8F340>, freq=None, tz=None, unit=None, year=None, month=None, day=None, hour=None, minute=None, second=None, microsecond=None, tzinfo=None, offset=None)

    参数:

    • ts_input:一个datetime-like/str/int/float,该值将被转换成Timestamp
    • freq:一个字符串或者DateOffset,给出了偏移量
    • tz:一个字符串或者pytz.timezone对象,给出了时区
    • unit:一个字符串。当ts_input为整数或者浮点数时,给出了转换单位
    • offset:废弃的,推荐使用freq
    • 其他的参数来自于datetime.datetime。它们要么使用位置参数,要么使用关键字参数,但是不能混用

    Timestamp_create

    属性有:

    • year/month/day/hour/minute/second/microsecond/nanosecond,这些属性都为整数
    • tzinfo:时区信息(默认为None),它是一个datetime.tzinfo对象
    • dayofweek/dayofyear/days_in_mounth/freqstr/quarter/weekofyear/...
    • value:保存的是UTC时间戳(自UNIX纪元1970年1月1日以来的纳秒数),该值在时区转换过程中保持不变

    Timestamp_property

    类方法有:

    • combine(date, time):通过datetime.datedatetime.time创建一个Timestamp
    • fromtimestamp(ts):通过时间戳创建一个Timestamp
    • now(tz=None):创建一个指定时区的当前时间。
    • doday(tz=None):创建一个指定时区的当前时间。
    • utcfromtimestamp(ts):从时间戳创建一个UTC Timestamp,其tzinfo=None
    • utcnow():创建一个当前的UTC Timestamp,其tzinfo=UTC

    Timestamp_cls_method

    方法有:

    • .astimezone(tz)/.tz_convert(tz):将一个tz-aware Timestamp转换时区
    • .isoformat(sep='T'):返回一个ISO 8601格式的字符串。
    • .normalize():将Timestamp调整到午夜(保留tzinfo
    • replace(**kwds):调整对应值,返回一个新对象
    • .to_period(self, freq=None):返回一个Period对象`
    • .tz_localize(self, tz, ambiguous='raise', errors='raise'):将一个tz-naive Timestamp ,利用tz转换为一个tz-aware Timestamp
    • .to_pydatetime(...):转换为python datetime对象
    • .to_datetime64(...):转换为numpy.datetime64对象
    • datetime.date/datetime.datetime继承而来的方法

    Timestamp_method0 Timestamp_method1

    默认情况下,pands中的Timestamptz-naive,即tz字段为NoneTimestamp提供了方便的时区转换功能。如果tz非空,则是tz-aware Timestamp。不同时区的时间可以比较,但是naive Timestamplocalized Timestamp无法比较。

    Timestamp的减法,要求两个Timestamp要么都是同一个时区下,要么都是tz-naive的。

  2. DateOffset对象:是一个表示日期偏移对象。Timestamp加一个日期偏移,结果还是一个Timestamp对象。其声明为:

    
    
    xxxxxxxxxx
    pd.DateOffset(n=1, normalize=False, **kwds)

    通常我们使用的是其子类(它们位于pandas.tseries.offsets中):

    • Day:日历日
    • BusinessDay:工作日
    • Hour:小时
    • Minute:分钟
    • Second:秒
    • Milli:毫秒
    • Micro:微秒
    • MonthEnd:每月最后一个日历日
    • BusinessMonthEnd:每月最后一个工作日
    • MonthBegin:每月第一个日历日
    • BusinessMonthBegin:每月第一个工作日
    • Week:每周几

    Day(2):表示两个工作日。

    DateOffset对象可以加在datetime/Timestamp对象上。如果是MonthEnd这种加上Timestamp,则第一次增量会将原日期向前滚动到符合频率规则的下一个日期。

    • 你可以通过DateOffset.rollforward(time_stamp)DateOffset.rollback(time_stamp)来显式地将日期向前或者向后滚动

    DateOffset

  3. 利用 str(dt_obj)函数或者datetime.strftime(format_str)方法,可以将datetime对象和Timestamp对象格式化为字符串。而利用datetime.strptime(dt_str,format_str)类方法,可以从字符串中创建日期。其中dt_str为日期字符串,如'2011-11-12'format_str为格式化字符串,如'%Y-%m-%d'

    • datetime.strptime是对已知格式进行日期解析的最佳方式。
    • 对于一些常见的日期格式,使用dateutil这个第三方包中的parser.parse(dt_str),它几乎可以解析所有的日期表示形式。
    • pandas.to_datetime()方法可以解析多种不同的日期表示形式,将字符串转换为日期。对于标准日期格式的解析非常快。如果发现无法解析(如不是一个日期),则返回一个NaTNot a Time),它是时间戳数据中的NA值。
  4. Timedelta对象:表示时间间隔。它等价于datetime.timedelta类。

    
    
    xxxxxxxxxx
    pd.Timedelta(value=<object object at 0x00000000004BF340>, unit=None, **kwargs)

    参数:

    • value:一个Timedelta对象,或者datetime.timedelta,或者np.timedelta64、或者一个整数,或者一个字符串。指定了时间间隔
    • unit:一个字符串,指明了当输入时整数时,其单位。可以为'D'/'h'/'m'/'s'/'ms'/'us'/'ns'
    • days/seconds/microseconds/nanoseconds:都是数值。给出了某个时间单位下的时间间隔

    方法:

    • to_timedelta64():返回一个numpy.timedelta64类型(按照纳秒的精度)
    • total_seconds():返回总的时间间隔,单位秒(精度为纳秒)
    • to_pytimedelta():返回一个datetime.timedelta对象

    属性:

    • components:返回各成分的命名元组
    • days/seconds/microseconds/nanoseconds:返回各个成分
    • delta:返回总的时常(纳秒计)

    一个时间间隔有天数、秒数等等属性。注意:所有的这些值与对应的单位相乘的和,才是总的时间间隔。

    两个Timestamp相减可以得到时间间隔Timedelta

    DateOffset也一定程度上表示时间间隔,但是DateOffset更侧重于按照某个固定的频率的间隔,比如一天、一个月、一周等。

    Timedelta

3. 时间段 Period

  1. Period表示一个标准的时间段(如某年,某月)。时间段的长短由freq属性决定。

    
    
    xxxxxxxxxx
    pd.Period(value=None, freq=None, ordinal=None, year=None, month=None, quarter=None, day=None, hour=None, minute=None, second=None)

    参数:

    • value:一个Period对象或者字符串(如'4Q2016'),它表示一个时区段。默认为None
    • freq:一个字符串,表示区间长度。可选的值从下面函数获取:
    • pandas.tseries.frequencies._period_code_map.keys()
    • pandas.tseries.frequencies._period_alias_dictionary()
    • 其他的参数和前面的其他类的构造函数类似。其中quarter表示季度。

    属性:

    • day/dayofweek/dayofyear/hour/minute/quarter/second/ year/week/weekday/weekofyear/year:对应的属性
    • end_time:区间结束的Timestampstart_time:区间开始的Timestamp
    • freq

    方法:

    • .asfreq(freq,how):转换为其他区间。其中freq为字符串。how可以为'E'/'end',表示包含区间结束;'S'/'start'表示包含区间开始。
    • .now(freq):返回当期日期对应freq下的Period
    • strftime(format):给出Period的格式化字符串表示
    • to_timestamp(freq,how):转换为Timestamp

    Period

  2. pands中的频率是由一个基础频率和一个倍数组成。

    • 基础频率通常以一个字符串别名表示,如'M'表示每月,'H'表示每小时。
    • 对于每个基础频率,都有一个DateOffset对象与之对应。如pandas.tseries.offsets中的Hour/MinuteHour(4)表示日期偏移为 4小时。
    • 倍数为基础频率之前的数字,如'4H'。也可以组合多个频率4H30min

    有些频率描述的时间点并不是均匀间隔的。如'M'就取决于每个月的天数。下面是一些常用的基础频率

    • 'D':偏移量类型为Day,为每日历日
    • 'B':偏移量类型为BusinessDay,为每工作日
    • 'H':偏移量类型为Hour,为每小时
    • 'T'或者'min':偏移量类型为Minute,为每分钟
    • 'S':偏移量类型为Second,为每秒
    • 'L'或者'ms':偏移量类型为Milli,为每毫秒
    • 'U':偏移量类型为Micro,为每微秒
    • 'M':偏移量类型为MonthEnd,为每月最后一个日历日
    • 'BM':偏移量类型为BusinessMonthEnd,为每月最后一个工作日
    • 'MS':偏移量类型为MonthBegin,为每月第一个日历日
    • 'BMS':偏移量类型为BusinessMonthBegin,为每月第一个工作日
    • 'W-Mon'...'W-TUE:偏移量类型为Week,为指定星期几(MON/TUE/WED/THU/FRI/SAT/SUN)开始算起,每周
  3. 调用Timestamp对象的.to_period(freq)方法能将时间点转化为包含该时间点的时间段。 Timestamp_to_period

  4. Period.asfreq()方法可以实现时间段的频率转换。 Period_visio

    创建Period时,我们可以传入一个Timestamp的各分量(由year/month...等提供)。创建的Period是包含该时刻,且指定频率。在使用Timestamp.to_period(freq)也是如此。

    给定一个频率的Period,如果转换到更低频的Period,则非常简单:返回指定频率下的包含本Period的那个Period即可。如果想转换到更高频的Period,则由于在本Period下,对应了很多个高频的Period,则返回哪一个,由how参数指定:

    • how=S:返回最开头的那个Period
    • how=E:返回最末尾的那个Period

    Period.to_timestamp(freq,how)方法中,我们首先进行时间段的频率转换,然后提取该频率的Period开始处的Timestamp

    Period_asfreq

  5. 如果两个Period对象有相同的频率,则它们的差就是它们之间的单位数量。

4. DatetimeIndex

  1. DatetimeIndex是一种索引,它的各个标量值是Timestamp对象,它用numpydatetime64数据类型以纳秒形式存储时间戳。

    
    
    xxxxxxxxxx
    pd.DatetimeIndex(data=None, freq=None, start=None, end=None, periods=None, copy=False, name=None, tz=None, verify_integrity=True, normalize=False, closed=None, ambiguous='raise', dtype=None, **kwargs)
    • data:一个array-like对象,给出了各个时间
    • copy:一个布尔值,如果为True 则拷贝基础数据
    • freq:一个字符串或者DateOffset对象,给出了频率
    • start:一个datetime-like,指定了起始时间。如果data=None,则使用它来生成时间
    • periods:一个整数(大于0),指定生成多少个时间。如果data=None,则使用它来生成时间
    • end:一个datetime-like,指定了结束时间。如果data=Noneperiods=None,则使用它来生成时间
    • closed:一个字符串或者None。用于指示区间的类型。可以为'left'(左闭右开),'right'(左开右闭),None(左闭右闭)
    • tz: 一个字符串,指定了时区。如果非空,则返回的是localized DatetimeIndex
    • name:指定了Index的名字

    DatetimeIndex

  2. pandas.date_range()函数可以生成指定长度的DatetimeIndex

    
    
    xxxxxxxxxx
    pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False,name=None, closed=None, **kwargs)

    各参数意义参考DatetimeIndex的构造函数。

  3. 对于以DatetimeIndex为索引的Series,我们可以通过指定Timestamp切片来截取指定时间区间的数据(也可以是对应的字符串来指定Timestamp)。注意:这里的Timestamp可以并不是DatetimeIndexkey

    DatetimeIndex_select0 DatetimeIndex_select1

  4. DatetimeIndex的方法有:(DatetimeIndex继承自Index,因此它有Index的所有方法)

    • indexer_at_time(time, asof=False):返回指定time的位置
    • indexer_between_time( start_time, end_time, include_start=True, include_end=True):返回指定的两个时间之间的索引的位置
    • normalize():将时间调整到午夜
    • to_period( freq=None):以指定freq转换到PeriodIndex
    • to_perioddelta( freq):计算不同索引值的Timedelta,然后转换成一个TimedeldaIndex
    • to_pydatetime/tz_convert/tz_localize:对每个时间使用Timestamp对应的方法

    任何Timestamp的属性都可以作用于DatetimeIndexDatetimeIndex_method

5. PeriodIndex

  1. 如果将一个Period序列作为索引,则该索引就是PeriodIndex类型。其各位置的值为Period对象。

    
    
    xxxxxxxxxx
    pd.PeriodIndex(data=None, ordinal=None, freq=None, start=None, end=None, periods=None, copy=False, name=None, tz=None, dtype=None, **kwargs)
    • data:一个array-like对象,给出了各个时间段
    • copy:一个布尔值,如果为True 则拷贝基础数据
    • freq:一个字符串或者period对象,给出了频率
    • start:一个period-like,指定了起始时间段。如果data=None,则使用它来生成时间段
    • periods:一个整数(大于0),指定生成多少个时间段。如果data=None,则使用它来生成时间段
    • end:一个period-like,指定了结束时间段。如果data=Noneperiods=None,则使用它来生成时间段
    • year/month/quarter/day/hour/minute/second:一个整数、array或者Series 。通过它们可以组装出一个Period序列。
    • tz: 一个字符串,指定了时区。如果非空,则返回的是localized DatetimeIndex
    • name:指定了Index的名字

    PeriodIndex

  2. pandas.period_range()函数可以生成指定长度的PeriodIndex

    
    
    xxxxxxxxxx
    pd.period_range(start=None, end=None, periods=None, freq='D', name=None)

    参数意义参见PeriodIndex的构造函数。

  3. PeriodIndex的方法有:(PeriodIndex继承自Index,因此它有Index的所有方法)

    • asfreq( freq=None, how='E'):转换成另一种频率的时间段
    • to_timestamp(self, freq=None, how='start'):转成DatetimeIndex
    • tz_convert(self, tz)/tz_localize(self, tz, infer_dst=False):转成对应时区的DatetimeIndex

    任何Period的属性都可以作用于PeriodIndexPeriodIndex_method

6. resample 和频率转换

  1. Series/DataFrame有一个shift()方法用于执行单纯的前移或者后移操作,:

    
    
    xxxxxxxxxx
    Series/DataFrame.shift(periods=1, freq=None, axis=0)
    • periods:一个整数(可以为负的),指定移动的数量。对于时间序列,单位由freq指定。
    • freq:一个DateOffset/timedelta或者一个频率字符串。指定移动的单位。注意,如果为PeriodIndex,则freq必须和它匹配。
    • axis:为0/'index'表示沿着0轴移动;为1/'columns'表示沿着1轴移动

    如果为时间序列,则该方法移动并建立一个新的索引,但是Series/DataFrame的值不变。对于非时间序列,则保持索引不变,而移动Series/DataFrame的值。

    本质上,时间序列和非时间序列都是index_i-->value_i转换成index_i+n-->value_i。只是时间序列截取的都是有效值,非时间序列截取了NaN而已。

    TimeSeries_shift0 TimeSeries_shift1 shift

  2. 重采样resampling指的是将时间序列从一个频率转换到另一个频率的处理过程。

    • 将高频数据转换到低频数据称作降采样。降采样时,待聚合的数据不必拥有固定的频率,期望的频率(低频的)会自动划分聚合的bin的边界。这些bin将时间序列拆分为多个片段。这些片段都是半开放的,一个数据点只能属于一个片段,所有的片段的并集组成了整个时间帧。在对数据降采样时,只需要考虑两样:
    • 各个区间哪边是闭合的
    • 如何标记各个聚合bin,用区间的开头还是结尾
    • 将低频数据转换到高频数据称作升采样。将数据转换到高频时,就不需要聚合了,而是插值,默认引入缺失值。插值的填充和填充方式与fillna/reindex的一样。
    • 在对时间段Period进行重采样时,升采样稍微麻烦点,因为你必须决定:哪个高频区间代表原区间。就像asfreq一样,convention可以设置为'end'/'start'

    有些重采样并不划分到上述两者之中。比如将W-WED(每周三)转换到W-FRI(每周五)。另外,由于Period是时间区间,所以升采样和降采样的规则就比较严格:

    • 降采样中,目标频率必须包含原频率。如Day->Month,目标频率为每月,原频率为每天。
    • 升采样中,原频率必须包含目标频率。如Day->Hour,目标频率为每小时,原频率为每天。

    如果不满足这些条件,则会引发异常。

  3. resample 方法:

    
    
    xxxxxxxxxx
    Series/DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None)
    • rule:一个字符串,指定了重采样的目标频率

    • axis:为0/'index'表示沿着0轴重采样;为1/'columns'表示沿着1轴重采样

    • closed:一个字符串,指定降采样中,各时间段的哪一端是闭合的。如果为'right',则是左开右闭区间;如果为'left',则是左闭右开区间

    • label:在降采样中,如何设置聚合值的标签。可以为'right'/'left'(面元的右边界或者左边界)。如:9:30~9:35这5分钟会被标记为9:30或者9:35

    • how:用于产生聚合值的函数名或者数组函数。可以为'mean'/'ohlc'/np.max等。默认为'mean',其他常用的有:'first'/'last'/'median'/'ohlc'/'max'/'min'

      how被废弃了,而是采用.resample().mean()这种方案。

    • convention:当重采样时期时,将低频转换到高频所采用的约定。可以为's'/'start'(用第一个高频)或者'e'/'end'(用最后一个高频)

    • loffset:一个timedelta,用于调整面元(bin)标签。如'-1s',会将用于将聚合的结果标签调早1秒,从而更容易表示它代表哪个区间。比如12:00:00你就难以判别是哪个区间,而11:59:59就很容易知道它是那个区间。

      你也可以对调用结果对象使用.shift()方法来实现该目的,这样就不必设置loffset

    • base:一个整数,默认为0.用于聚合过程中,当频率可以整除1D(比如4H)时,第一个完整的分组从哪个元素开始的。如rule='4H'base=2,则Series[0:1]作为一个分组,Series[2:6]....作为一个分组....

    • on:一个字符串,对于DataFrame,它指定了重采样的列。该列必须是datetime-like

    • level:一个字符串或者整数。对于MultiIndex,该参数指定了被重采样的子索引

    • fill_method:一个字符串,指定升采样时,如何插值。如'ffill'/'bfill'。默认不插值

      该参数被废弃。推荐使用.resample().ffill()这种方案。而limit作为ffill()的参数。

    • limit:一个整数。指定向前或者向后填充时,运行连续填充的最大单元数量

    • kind:一个字符串,指定聚合到时间段Period还是时间戳Timestamp。默认聚合到时间序列的索引类型

    resample0 resample1 resample2 resample3 resample4

  4. OHLC重采样是计算bin中的四个值:开盘值(第一个值)、收盘值(最后一个值)、最高值(最大值)、最低值(最小值)

  5. 另一种降采样的办法是:使用groupby功能。如:

    
    
    xxxxxxxxxx
    series.groupby(lambda x:x.month).mean()

    如果你想根据年份来聚合,则使用x.year

resample_groupby

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文