没看过往期的朋友可以先看看第一期哈~
Pandas数据分析教程(1)-Series和Dataframe
在上一期中,我们简单介绍了Series和Dataframe两种Pandas中常用的数据结构,那么问题来了,假设我已经有了这两种数据,如何从中提取我想要的部分?
这个问题对于后续读取Excel文件 *** 作至关重要,毕竟Excel文件内容跟Dataframe很像,本节我记录下了Pandas中读取、选择、过滤两种数据结构的方法。
Dataframe类型从某种程度上来说,只不过是比Series多了一个维度,在读取时少填一个参数就可以了,读取方法本质上没啥区别,因此本文主要记录Dataframe的读取方法。
由于Pandas建立在Numpy的基础之上,Pandas的索引与Numpy数组索引的功能类似。但是,回忆一下,Numpy数组的索引必须是整数,而Pandas的索引可以是字符串,这就是最主要的区别。
本文记录两种主要方法:普通索引法和loc/iloc选择法。现建立一个Dataframe作为本文的例子:
>> table = pd.Dataframe(np.arange(16).reshape(4,4), range(1,5),['A','B','C','D']) >> table A B C D 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 4 12 13 14 15普通索引
普通索引主要用于选取指定列或列序列的数据,另外也可通过上一篇中所讲的布尔数组或者切片选取指定行:
table['C'] #选取'C'行,返回一个Series数据 table[['C','D']] #选取'C'行和'D'行,返回一个Dataframe数据
用切片或者布尔数组可以选取指定行:
table[1:4] #选取第2行到第4行,注意是按从0开始的索引计数的,而不是我们自己定的1-4,左闭右开 table[table['C']>7] #选取C列大于7的行
loc/iloc索引注意:Series在切片时可有以下形式:obj [‘b’:‘d’],截取行b到行d间的行,包括b、d(假定索引从’a’到’d’),也即左闭右闭。
loc和iloc是pandas的两种用于索引的函数,相较于普通索引,这种方法运用的更为广泛。loc方法称为轴标签索引,iloc方法被称为整数索引。
首先来看iloc方法:
>> table.iloc[[2,3],[3,0,1]] D A B 3 11 8 9 4 15 12 13
本段代码代表选择第3行(下标为2)和第4行(下标为3)对应第4列、第1列、第2列的部分,注意输出数据的排列顺序是依据给出的索引数据来的。
loc方法与iloc方法的功能是一致的,区别在于,loc方法给出的索引可以不是整数,该方法默认用户填入的参数为定义的标签,而不是从0 → {rightarrow} →N-1的下标。譬如在本例中,列标签为[‘A’,‘B’,‘C’,‘D’],那么可以做出如下示例:
>> table.loc[[2,3],['D','A','B']] D A B 2 7 4 5 3 11 8 9
这一次模块对索引的认定是用户自定义的索引了,不再是0→N-1的下标了
当然两种方法也是可以进行切片 *** 作的:
table.loc[1:3,:'C'] table.iloc[:,3:]
这些 *** 作都是很好理解的。同时,我们也可以传入布尔数组,进行条件筛选,来个复杂点的:
>> table.loc[2:4,['A','C','D']][(table.A>4) & (table.C>4)] #思考该语句的意思 A C D 3 8 10 11 4 12 14 15
其实还有一些其他的索引办法,例如at/iat索引、_get_value方法、ix方法(注意!最新版已弃用)等等,但总的来说,这些方法的功能loc/iloc索引可以做到,但loc/iloc索引能做到的这些方法做不到,所以一般都用的很少。at/iat索引、_get_value方法都是用于获取一个单元格的值的方法,其中at和iat的区别跟loc和iloc的区别是一样的。
下次?下次不知道会写啥了,写作内容随机 [狗头.jpg]。
转载请标注作者和出处链接
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)