开发者学堂课程【Python 常用数据科学库:索引进阶】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/546/detail/7493
索引进阶
内容介绍
一、isin 操作
二、where 操作
三、query 操作
一、isin 操作
1、在 pandas 当中还有很多索引的方式,索引之后如何查其实就相当于几个关键词的使用。
2、首先还是要先构造一个 pandas 的结构,随便去构造一个数据,指定一个索引,索引从几开始都是可以的,可以自己指定,做一个倒叙索引,然后再指定一个 dtype类型
import pandas as pd
import numy as np
S = pd.Series(np.arange(5),index = np.arange(5) [::-1],dtype=‘int64’)
s
最后看一下 s 类型,有索引43210,然后数值是01234。
有了这个东西之后,当构造一个索引的时候,有一个代码叫 isin,可以看一下当前的数据是不是在某个数据当中
比如说01234,它是不是在134中,执行一下,0没在1在2没在,三在四,这个就是isin,通过 isin,还可以拿到它的一个索引,看一下当前的数在不在一个当中,然后索引回传过去就可以把数据取回来。这个就是一个基本的操作,isin 不光可以执行数据,对于一些索引来说,也可以执行这样的操作。
3、S2 是 panda 的一个 series,构造一个索引结构,这里数值是 arange,然后index 写复杂一些,写成一个多重索引的格式,Mult 之前说过了, 直接从构造的product 当中导进来。自己来写一个 list 格式, 第一重的索引,比如说是01,第二重索引有三个数写一个 a,然后再指定一个 b 和 c,再来执行一下,看一下 s2 什么样子的。
s2 = pd. Series (np.arange(6), index = pd. MultiIndex. from_product([[o.1], [' a','b','c']]))
s2
4、这个是 s2构造出来的数据,然后当数据去定位一个东西的时候,也可以这样去做s2。比如说去定位它的一个索引的时候,可以把 s2再传进去,看它的索引值是否指定的范围当中。
5、这里指定一个范围,比如说是不是在1 a 当中,这是第一种情况,第二种情况是不是在0 b 当中,就这两种情况
s2.iloc[s2.index.isin([(1,'a' ), (0 b)])]
执行一下结果就出来了,可以在索引当中进行查找,相当于是执行这样一个操作,这个就是最基本的 isin 操作。
二、where 操作
1、在 pandas 当中,除了 isin 还有一个叫 where 操作。比如 s
4 0
3 1
2 2
1 3
0 4
dtpye: int64
设置 s 大于2,执行可以出来这样的结果。
1 3
0 4
dtpye: int64
这个就相当于是 where 操作。
2、再构造一个数据看一下。df 随便构造出来,然后数值就是用 random 去构造,随机构造一个8行4列的值,index 值可以直接指定成一个日期类型,再指定列名ABCD,最后声明一下时间,随便指定一下时间窗口,当前需要这么八天的一个数据,从2017年11月24号开始,然后指定一个八天的周期,把data再拿过来。
dates = pd.date_range('20171124 ‘, periods=8)
df=pd.DataFrame(np.random.randn(8,4),index=dates,columns=['A', 'B',' C',’D'])
执行就得到一份时间数据
3、在这里可以执行一些操作,比如在这个数据当中可以去选择一些数据,还有这样一个关键词,可能用的并不是很多,因为有一些方面操作能替代,但是也得知道。里面写匿名函数 lambda x,对于每个数据来说,看一下它是不是等于 A 这个列,如果说是这个列,就把它留下来,指定的维度是按照一个列去选的
df.select (lambda x:x=='A’,axis='columns')
执行一下只把 a 这个列给拿出来了,其实简单来说 df 杠 a,然后一个中括号a就完事了,只不过它有着这样的一个操作
4、调 df,在 df 中指定 where 关键词,看一下小于零的有哪些 df.where(df < 0) 执行一下,它会把小于零的打印出来。当前11月24号 D 列的值是 NaN,之所以是这个值,是因为它大于零了。where 操作有一点不同,当指定完之后,它会把不满足范围的制成 NaN,这样不太好, 所以可以给它换一种写法,还可以往里再加上一个额外参数,比如说先是判断一下它是不是小于零,如果说小于零就它指定成一个负的当前值df.where(df < 0 ,-df),执行一下,原来D列的值是1.08,然后在这里判断了一下,如果是小于零的就原封不动,如果不小于零就是不满足条件的还可以给它执行额外的一种操作。
三、query操作
1、除了 where 操作之外,还有一个叫 query,还是构造 df,在 DataFrame 中随便指定一些值,然后指定一个十行三列的数据,列名等于 list,里面是 abc,然后分别会把 abc 指出来的,df=pd.DataFrame(np.random.rand(10,3),columns=list('abc’))
df
这里面有这样一个操作,这是 DataFrame
可以指定一些值,query 一下,query 里可以进行查找,比如说看一下 DataFrame 里有没有a的一个值写上一个字符串,查的是第一个条件是 a 小于 b df. query(‘(a<b)’)执行会把满足条件的结果拿出来,然后还可以写一个附加条件,a大于 b,并且是 b 小于 c,df. query(‘(a<b)&(b<c)’)然后再执行一下,这样还是能够把这个结果执行出来。这个就是一个 query 的结构,相当于进行一个查找,像是一个 stream 串的感觉,其实在 panda 当中,能用的东西还是蛮多的,这一块只是简单介绍一下,有一个 isin,还有一个 where 和 query,到时候咱们查数据的时候都可以来去用上的。