Pandas Shift函数的基础入门学习笔记
PandasShift函数基础
在使用Pandas的过程中,有时会遇到shift函数,今天就一起来彻底学习下。先来看看帮助文档是怎么说的:
>>>importpandas >>>help(pandas.DataFrame.shift) Helponfunctionshiftinmodulepandas.core.frame: shift(self,periods=1,freq=None,axis=0) Shiftindexbydesirednumberofperiodswithanoptionaltimefreq Parameters ---------- periods:int Numberofperiodstomove,canbepositiveornegative freq:DateOffset,timedelta,ortimerulestring,optional Incrementtousefromthetseriesmoduleortimerule(e.g.'EOM'). SeeNotes. axis:{0or'index',1or'columns'} Notes ----- Iffreqisspecifiedthentheindexvaluesareshiftedbutthedata isnotrealigned.Thatis,usefreqifyouwouldliketoextendthe indexwhenshiftingandpreservetheoriginaldata. Returns ------- shifted:DataFrame
该函数主要的功能就是使数据框中的数据移动,若freq=None时,根据axis的设置,行索引数据保持不变,列索引数据可以在行上上下移动或在列上左右移动;若行索引为时间序列,则可以设置freq参数,根据periods和freq参数值组合,使行索引每次发生periods*freq偏移量滚动,列索引数据不会移动。
参数详解:
- period:表示移动的幅度,可以是正数,也可以是负数,默认值是1,1就表示移动一次,注意这里移动的都是数据,而索引是不移动的,移动之后没有对应值的,就赋值为NaN。
- freq:DateOffset,timedelta,ortimerulestring,可选参数,默认值为None,只适用于时间序列,如果这个参数存在,那么会按照参数值移动时间索引,而数据值没有发生变化。
- axis:{0,1,‘index',‘columns'},表示移动的方向,如果是0或者'index'表示上下移动,如果是1或者'columns',则会左右移动。
先来看一下一些简单的示例:
1、非时间索引下period的设置
假设存在一个DataFrame数据df:
indexvalue1 A0 B1 C2 D3
如果执行以下代码 df.shift() 就会变成如下:
indexvalue1 ANaN B0 C1 D2
执行df.shift(2)就会得到:
indexvalue1 ANaN BNaN C0 D1
执行df.shift(-1)会得到:
indexvalue1 A1 B2 C3 DNaN
注意,shift移动的是整个数据,如果df有如下多列数据:
AABBCCDD a0123 b4567 c891011 d12131415
执行df.shift(2)的数据为:
AABBCCDD aNaNNaNNaNNaN bNaNNaNNaNNaN c0.01.02.03.0 d4.05.06.07.0
如果只想移动df中的某一列数据,则需要这样操作:df['DD']=df['DD'].shift(1)
执行后的数据为:
AABBCCDD a012NaN b456NaN c891011 d12131415
2、时间索引下freq参数设置
假设存在如下DataFrame的df:
df=pd.DataFrame(np.arange(16).reshape(4,4),columns=['AA','BB','CC','DD'],index=pd.date_range('2012-06-01','2012-06-04'))
AABBCCDD 2012-06-010123 2012-06-024567 2012-06-03891011 2012-06-0412131415
执行df.shift(freq=datetime.timedelta(1)) 后:
AABBCCDD 2012-06-020123 2012-06-034567 2012-06-04891011 2012-06-0512131415
执行df.shift(freq=datetime.timedelta(-2))后:
AABBCCDD 2012-05-300123 2012-05-314567 2012-06-01891011 2012-06-0212131415
可以看到索引直接变了。
3、axis轴向设置
df=pd.DataFrame(np.arange(16).reshape(4,4),columns=['AA','BB','CC','DD'],index=['a','b','c','d']) df Out[1]: AABBCCDD a0123 b4567 c891011 d12131415 #当period为正时,默认是axis=0轴的设定,向下移动 df.shift(2) Out[2]: AABBCCDD aNaNNaNNaNNaN bNaNNaNNaNNaN c0.01.02.03.0 d4.05.06.07.0 #当axis=1,沿水平方向进行移动,正数向右移,负数向左移 df.shift(2,axis=1) Out[3]: AABBCCDD aNaNNaN0.01.0 bNaNNaN4.05.0 cNaNNaN8.09.0 dNaNNaN12.013.0 #当period为负时,默认是axis=0轴的设定,向上移动 df.shift(-1) Out[4]: AABBCCDD a4.05.06.07.0 b8.09.010.011.0 c12.013.014.015.0 dNaNNaNNaNNaN
pandas中上下两行相减(隔行相减)--shift函数的使用
最近使用pandas处理数据,需求是想相邻两行上下相减,查API发现shift函数,很灵活,。你也可以隔任意行相减。
p['xx_1']=p["xx"].shift(1)
上面得到的就是xx字段向下移动一行的结果,和之前相比向下移动一行,你可以设置为任意行,也可是向上向下
p['xx']-p["xx_1"]
这就是前后两行的差值,很方便,Pandas很强大
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。