前言:
而今同学们对“python中resample函数”大体比较珍视,小伙伴们都想要分析一些“python中resample函数”的相关文章。那么小编也在网络上搜集了一些关于“python中resample函数””的相关内容,希望看官们能喜欢,各位老铁们一起来学习一下吧!移动(shifting)指的是沿着时间轴将数据前移或后移。Series和DataFrame都有一个shift方法用于执行单纯的前移或后移操作,保持索引不变:
1.使用shift方法
In [105]: ts=Series(np.random.randn(4),index=pd.date_range('1/1/2019',periods=4,freq='M'))
In [106]: ts
Out[106]:
2019-01-31 -0.690646
2019-02-28 -0.088123
2019-03-31 2.525132
2019-04-30 2.147924
Freq: M, dtype: float64
In [107]: ts.shift(2)
Out[107]:
2019-01-31 NaN
2019-02-28 NaN
2019-03-31 -0.690646
2019-04-30 -0.088123
Freq: M, dtype: float64
In [108]: ts.shift(-2)
Out[108]:
2019-01-31 2.525132
2019-02-28 2.147924
2019-03-31 NaN
2019-04-30 NaN
Freq: M, dtype: float64
Shift通常用于计算一个时间序列或多个时间序列(DataFrame的列)中的百分比变化,可以这样表达:
In [112]: ts
Out[112]:
2019-01-31 -0.690646
2019-02-28 -0.088123
2019-03-31 2.525132
2019-04-30 2.147924
Freq: M, dtype: float64
In [113]: ts.shift(1)
Out[113]:
2019-01-31 NaN
2019-02-28 -0.690646
2019-03-31 -0.088123
2019-04-30 2.525132
Freq: M, dtype: float64
In [114]: ts/ts.shift(1)
Out[114]:
2019-01-31 NaN
2019-02-28 0.127596
2019-03-31 -28.654500
2019-04-30 0.850618
Freq: M, dtype: float64
In [115]: ts/ts.shift(1)-1
Out[115]:
2019-01-31 NaN
2019-02-28 -0.872404
2019-03-31 -29.654500
2019-04-30 -0.149382
Freq: M, dtype: float64
由于单纯的移位操作不会修改索引,所以部分数据会丢失。因此,如果频率已知,则可以将其传给shift以便实现对时间戳进行位移而不是对数据进行简单位移:
In [118]: ts.shift(1,freq='M')
Out[118]:
2019-02-28 -0.690646
2019-03-31 -0.088123
2019-04-30 2.525132
2019-05-31 2.147924
Freq: M, dtype: float64
In [119]: ts.shift(2,freq='M')
Out[119]:
2019-03-31 -0.690646
2019-04-30 -0.088123
2019-05-31 2.525132
2019-06-30 2.147924
Freq: M, dtype: float64
还可以使用其他频率,就可以灵活地对数据进行超前和滞后处理了:
2.使用freq='D'参数
In [122]: ts
Out[122]:
2019-01-31 -0.690646
2019-02-28 -0.088123
2019-03-31 2.525132
2019-04-30 2.147924
Freq: M, dtype: float64
In [123]: ts.shift(3,freq='D')
Out[123]:
2019-02-03 -0.690646
2019-03-03 -0.088123
2019-04-03 2.525132
2019-05-03 2.147924
dtype: float64
In [124]: ts.shift(4,freq='D')
Out[124]:
2019-02-04 -0.690646
2019-03-04 -0.088123
2019-04-04 2.525132
2019-05-04 2.147924
dtype: float64
3.freq='3D'
In [125]: ts
Out[125]:
2019-01-31 -0.690646
2019-02-28 -0.088123
2019-03-31 2.525132
2019-04-30 2.147924
Freq: M, dtype: float64
In [126]: ts.shift(1,freq='3D')
Out[126]:
2019-02-03 -0.690646
2019-03-03 -0.088123
2019-04-03 2.525132
2019-05-03 2.147924
dtype: float64
4.freq='90T'
In [127]: ts
Out[127]:
2019-01-31 -0.690646
2019-02-28 -0.088123
2019-03-31 2.525132
2019-04-30 2.147924
Freq: M, dtype: float64
In [128]: ts.shift(1,freq='90T')
Out[128]:
2019-01-31 01:30:00 -0.690646
2019-02-28 01:30:00 -0.088123
2019-03-31 01:30:00 2.525132
2019-04-30 01:30:00 2.147924
Freq: M, dtype: float64
3.通过偏移量对日期进行位移
Pandas的日期偏移量还可以用在datetime或TimeStamp对象上:
使用锚点偏移量
In [129]: from pandas.tseries.offsets import Day,MonthEnd
In [130]: now=datetime(2019,1,1)
In [131]: now+3*Day()
Out[131]: Timestamp('2019-01-04 00:00:00')
In [132]: now+MonthEnd()
Out[132]: Timestamp('2019-01-31 00:00:00')
In [133]: now+MonthEnd(2)
Out[133]: Timestamp('2019-02-28 00:00:00')
In [134]: offset=MonthEnd()
In [135]: offset
Out[135]: <MonthEnd>
通过锚点偏移量的rollforward(向前)方法
In [136]: offset.rollforward(now)
Out[136]: Timestamp('2019-01-31 00:00:00')
通过锚点偏移量的rollback(向后)方法
In [137]: offset.rollback(now)
Out[137]: Timestamp('2018-12-31 00:00:00')
结合groupby使用两个“滚动”方法
n [138]: ts=Series(np.random.randn(20),index=pd.date_range('1/1/2019',periods=20,freq='4d'))
In [139]: ts
Out[139]:
2019-01-01 1.111570
2019-01-05 -0.665521
2019-01-09 0.339194
2019-01-13 1.290567
2019-01-17 -0.903246
2019-01-21 -0.090241
2019-01-25 -0.054101
2019-01-29 0.718818
2019-02-02 0.593305
2019-02-06 -0.452957
2019-02-10 0.257083
2019-02-14 -0.957972
2019-02-18 2.925902
2019-02-22 0.784374
2019-02-26 -0.278628
2019-03-02 -0.415946
2019-03-06 -0.339939
2019-03-10 2.128525
2019-03-14 -1.421271
2019-03-18 0.442716
Freq: 4D, dtype: float64
In [140]: ts.groupby(offset.rollforward).mean()
Out[140]:
2019-01-31 0.218380
2019-02-28 0.410158
2019-03-31 0.07
4.使用resample方法
In [141]: ts.resample('M',how='mean')
__main__:1: FutureWarning: how in .resample() is deprecated
the new syntax is .resample(...).mean()
Out[141]:
2019-01-31 0.218380
2019-02-28 0.410158
2019-03-31 0.078817
Freq: M, dtype: float64
In [142]: ts.resample('M').mean()
Out[142]:
2019-01-31 0.218380
2019-02-28 0.410158
2019-03-31 0.078817
Freq: M, dtype: float64
「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」
标签: #python中resample函数