ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:20.26KB ,
资源ID:4464198      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4464198.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(pandas 时间序列操作.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

pandas 时间序列操作.docx

1、pandas 时间序列操作数据类型及操作Python 标准库的 datetimedatetime 模块中的 datetime、 time、 calendar 等类都可以用来存储时间类型以及进行一些转换和运算操作。 from datetime import datetime now = datetime.now() nowdatetime.datetime(2014, 6, 17, 15, 56, 19, 313193) delta = datetime(2010,2,2)-datetime(2010,2,1) deltadatetime.timedelta(1) now + deltadate

2、time.datetime(2014, 6, 18, 15, 56, 19, 313193)datetime 对象间的减法运算会得到一个 timedelta 对象,表示一个时间段。datetime 对象与它所保存的字符串格式时间戳之间可以互相转换。str()函数是可用的,但更推荐datetime.strptime()方法。这个方法可以实现双向转换。 str(now)2014-06-17 15:56:19.313193 now.strftime(%Y-%m-%d)2014-06-17 datetime.strptime(2010-01-01,%Y-%m-%d)datetime.datetime(

3、2010, 1, 1, 0, 0)如%Y这种格式代表了某种具体的意义,但用着很麻烦。因此可以使用一个名为 dateutil 第三方包的 parser.parse() 函数实现自动转义,它几乎可以解析任何格式(这也可能会带来麻烦)。 from dateutil.parser import parse parse(01-02-2010,dayfirst=True)datetime.datetime(2010, 2, 1, 0, 0) parse(01-02-2010)datetime.datetime(2010, 1, 2, 0, 0) parse(55)datetime.datetime(205

4、5, 6, 17, 0, 0)pandas 的 TimeStamppandas 最基本的时间日期对象是一个从 Series 派生出来的子类 TimeStamp,这个对象与 datetime 对象保有高度兼容性,可通过pd.to_datetime()函数转换。(一般是从 datetime 转换为 Timestamp) pd.to_datetime(now)Timestamp(2014-06-17 15:56:19.313193, tz=None) pd.to_datetime(np.nan)NaTpandas 的时间序列pandas 最基本的时间序列类型就是以时间戳(TimeStamp)为 in

5、dex 元素的 Series 类型。 dates = datetime(2011,1,1),datetime(2011,1,2),datetime(2011,1,3) ts = Series(np.random.randn(3),index=dates) ts2011-01-01 0.3622892011-01-02 0.5866952011-01-03 -0.154522dtype: float64 type(ts) ts.index2011-01-01, ., 2011-01-03Length: 3, Freq: None, Timezone: None ts.index0Timestam

6、p(2011-01-01 00:00:00, tz=None)时间序列之间的算术运算会自动按时间对齐。索引、选取、子集构造时间序列只是 index 比较特殊的 Series ,因此一般的索引操作对时间序列依然有效。其特别之处在于对时间序列索引的操作优化。如使用各种字符串进行索引: ts201101010.36228897878097266 ts2011-01-010.36228897878097266 ts01/01/20110.36228897878097266对于较长的序列,还可以只传入 “年” 或 “年月” 选取切片: ts2011-01-01 0.3622892011-01-02 0.

7、5866952011-01-03 -0.1545222012-12-25 0.111869dtype: float64 ts20122012-12-25 0.111869dtype: float64 ts2011-1-2:2012-122011-01-02 0.5866952011-01-03 -0.1545222012-12-25 0.111869dtype: float64除了这种字符串切片方式外,还有一种实例方法可用:ts.truncate(after=2011-01-03)。值得注意的是,切片时使用的字符串时间戳并不必存在于 index 之中,如ts.truncate(before=3

8、055)也是合法的。日期的范围、频率以及移动pandas 中的时间序列一般被默认为不规则的,即没有固定的频率。但出于分析的需要,我们可以通过插值的方式将序列转换为具有固定频率的格式。一种快捷方式是使用.resample(rule)方法: ts2011-01-01 0.3622892011-01-02 0.5866952011-01-03 -0.1545222011-01-06 0.222958dtype: float64 ts.resample(D)2011-01-01 0.3622892011-01-02 0.5866952011-01-03 -0.1545222011-01-04 NaN2

9、011-01-05 NaN2011-01-06 0.222958Freq: D, dtype: float64生成日期范围pd.date_range()可用于生成指定长度的 DatetimeIndex。参数可以是起始结束日期,或单给一个日期,加一个时间段参数。日期是包含的。 pd.date_range(20100101,20100110)2010-01-01, ., 2010-01-10Length: 10, Freq: D, Timezone: None pd.date_range(start=20100101,periods=10)2010-01-01, ., 2010-01-10Leng

10、th: 10, Freq: D, Timezone: None pd.date_range(end=20100110,periods=10)2010-01-01, ., 2010-01-10Length: 10, Freq: D, Timezone: None默认情况下,date_range 会按天计算时间点。这可以通过 freq 参数进行更改,如 “BM” 代表 bussiness end of month。 pd.date_range(20100101,20100601,freq=BM)2010-01-29, ., 2010-05-31Length: 5, Freq: BM, Timezo

11、ne: None频率和日期偏移量pandas 中的频率是由一个基础频率和一个乘数组成的。基础频率通常以一个字符串别名表示,如上例中的 “BM”。对于每个基础频率,都有一个被称为日期偏移量(date offset)的对象与之对应。可以通过实例化日期偏移量来创建某种频率: Hour() Hour(2) Hour(1) + Minute(30)但一般来说不必这么麻烦,使用前面提过的字符串别名来创建频率就可以了: pd.date_range(00:00,12:00,freq=1h20min)2014-06-17 00:00:00, ., 2014-06-17 12:00:00Length: 10, F

12、req: 80T, Timezone: None可用的别名,可以通过 help() 或 文档来查询,这里就不写了。移动(超前和滞后)数据移动(shifting)指的是沿着时间轴将数据前移或后移。Series 和 DataFrame 都有一个.shift()方法用于执行单纯的移动操作,index 维持不变: ts2011-01-01 0.3622892011-01-02 0.5866952011-01-03 -0.1545222011-01-06 0.222958dtype: float64 ts.shift(2)2011-01-01 NaN2011-01-02 NaN2011-01-03 0.

13、3622892011-01-06 0.586695dtype: float64 ts.shift(-2)2011-01-01 -0.1545222011-01-02 0.2229582011-01-03 NaN2011-01-06 NaNdtype: float64上例中因为移动操作产生了 NA 值,另一种移动方法是移动 index,而保持数据不变。这种移动方法需要额外提供一个 freq 参数来指定移动的频率: ts.shift(2,freq=D)2011-01-03 0.3622892011-01-04 0.5866952011-01-05 -0.1545222011-01-08 0.222

14、958dtype: float64 ts.shift(2,freq=3D)2011-01-07 0.3622892011-01-08 0.5866952011-01-09 -0.1545222011-01-12 0.222958dtype: float64时期及其算术运算本节使用的时期(period)概念不同于前面的时间戳(timestamp),指的是一个时间段。但在使用上并没有太多不同,pd.Period类的构造函数仍需要一个时间戳,以及一个 freq 参数。freq 用于指明该 period 的长度,时间戳则说明该 period 在公园时间轴上的位置。 p = pd.Period(2010

15、,freq=M) pPeriod(2010-01, M) p + 2Period(2010-03, M)上例中我给 period 的构造器传了一个 “年” 单位的时间戳和一个 “Month” 的 freq,pandas 便自动把 2010 解释为了 2010-01。period_range 函数可用于创建规则的时间范围: pd.period_range(2010-01,2010-05,freq=M)freq: M2010-01, ., 2010-05length: 5PeriodIndex 类保存了一组 period,它可以在任何 pandas 数据结构中被用作轴索引: Series(np.r

16、andom.randn(5),index=pd.period_range(201001,201005,freq=M)2010-01 0.7559612010-02 -1.0744922010-03 -0.3797192010-04 0.1536622010-05 -0.291157Freq: M, dtype: float64时期的频率转换Period 和 PeriodIndex 对象都可以通过其.asfreq(freq, method=None, how=None)方法被转换成别的频率。 p = pd.Period(2007,freq=A-DEC) p.asfreq(M,how=start)

17、Period(2007-01, M) p.asfreq(M,how=end)Period(2007-12, M) ts = Series(np.random.randn(1),index=p) ts2007 -0.112347Freq: A-DEC, dtype: float64 ts.asfreq(M,how=start)2007-01 -0.112347Freq: M, dtype: float64时间戳与时期间相互转换以时间戳和以时期为 index 的 Series 和 DataFrame 都有一对.to_period()和to_timestamp(how=start)方法用于互相转换

18、index 的类型。因为从 period 到 timestamp 的转换涉及到一个取端值的问题,所以需要一个额外的 how 参数,默认为 start: ts = Series(np.random.randn(5),index=pd.period_range(201001,201005,freq=M) ts2010-01 -0.3121602010-02 0.9626522010-03 -0.9594782010-04 1.2402362010-05 -0.916218Freq: M, dtype: float64 ts.to_timestamp()2010-01-01 -0.312160201

19、0-02-01 0.9626522010-03-01 -0.9594782010-04-01 1.2402362010-05-01 -0.916218Freq: MS, dtype: float64 ts.to_timestamp(how=end)2010-01-31 -0.3121602010-02-28 0.9626522010-03-31 -0.9594782010-04-30 1.2402362010-05-31 -0.916218Freq: M, dtype: float64 ts.to_timestamp().to_period()2010-01-01 00:00:00.000 -

20、0.3121602010-02-01 00:00:00.000 0.9626522010-03-01 00:00:00.000 -0.9594782010-04-01 00:00:00.000 1.2402362010-05-01 00:00:00.000 -0.916218Freq: L, dtype: float64 ts.to_timestamp().to_period(M)2010-01 -0.3121602010-02 0.9626522010-03 -0.9594782010-04 1.2402362010-05 -0.916218Freq: M, dtype: float64重采

21、样及频率转换重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的过程。pandas 对象都含有一个.resample(freq, how=None, axis=0, fill_method=None, closed=None, label=None, convention=start, kind=None, loffset=None, limit=None, base=0)方法用于实现这个过程。本篇最前面曾用 resample 规整化过时间序列。当时进行的是插值操作,因为原索引的频率与给出的 freq 参数相同。resample 方法更多的应用场合是 freq 发生改变的

22、时候,这时操作就分为升采样(upsampling)和降采样(downsampling)两种。具体的区别都体现在参数里。 ts2010-01 -0.3121602010-02 0.9626522010-03 -0.9594782010-04 1.2402362010-05 -0.916218Freq: M, dtype: float64 ts.resample(D,fill_method=ffill)#升采样2010-01-01 -0.312162010-01-02 -0.312162010-01-03 -0.312162010-01-04 -0.312162010-01-05 -0.31216

23、2010-01-06 -0.312162010-01-07 -0.312162010-01-08 -0.312162010-01-09 -0.312162010-01-10 -0.312162010-01-11 -0.312162010-01-12 -0.312162010-01-13 -0.312162010-01-14 -0.312162010-01-15 -0.31216.2010-05-17 -0.9162182010-05-18 -0.9162182010-05-19 -0.9162182010-05-20 -0.9162182010-05-21 -0.9162182010-05-22 -0.9162182010-05-23 -0.9162182010-05-24 -0.9162182010-05-25 -0.9162182010-05-26 -0.9162182010-05-27 -0.9162182010-05-28 -0.9162182010-05-29 -0.9162182010-05-30 -0.9162182010-05-31 -0.916218Freq: D, Length: 151 ts.resample(A-JAN,how=sum)#降采样2010 -0.3121602011 0.327191Freq: A-JAN, dtype: float64

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1