pandas库是基于numpy构建的,所以其中的数据类型具有许多的相似之处,这里我们研究ndarray和DataFrame这两种数据结构在索引方面的方法,并做一些基本的对比,以此让我们更好的记忆和理解相应的索引方法。先抛出结论:对于DataFrame对象,其只有直接的df[][]索引和ndarray不一样,此时DataFrame先索引的是列,而不是行,也没有df[i,j]的索引方法,但是对于切片索引以及df.iloc的索引方法,和ndarray完全一样;此外,DataFrame还有df.loc的标签索引方法。
首先对于ndarray,如图定义一个二维的ndarray对象,则arr[i]和arr[i][j](等价于arr(i,j))都可以表示索引,其中arr[i]表示行索引,arr[i][j]表示有顺序的先进行第一个维度的索引(即行),再进行第二个维度的索引(即对应的行中的元素);同理的,对于三维的ndarray也是如此,arr[i][j][k](等价于arr(i,j,k))表示一次在第1、2、3维度上的索引。这里只是要注意在ndarray中,降维时,指标的从左到右对应维度的从外到内,故如果是三维ndarray,arr[0]对应第一个截面,以此类推。
当然,ndarray还可以进行切片索引,比如arr[0,:]表示第一行,arr[:,0]表示第一列。
对于DataFrame,如图定义一个DataFrame对象df.虽然同ndarray类似,都有类似的索引方式,但是直接索引的内容却不一样,比如df['a']得到第一列,这里不同于arr[i],对于DataFrame对象,直接的df[i]索引,得到的是第i+1列,而不是第i+1行,因此df['a'][2]会得到8,之所以会如此定义,是为了在实际中使用的方便。要注意的是,DataFrame对象没有df[i,j]的索引方式。
但是,当进行切片索引的时候,比如重新定义如下的df,切片索引又同ndarray一样,df[:2]得到前两行,而不是前两列;df[:][:1]得到第一列。故在切片索引的时候,又和ndarray一样了。此外,DataFrame对象还有索引方法df.iloc[]和df.loc[],前者是对index和columns为整数时的所以,后者是对index和columns为其他标签时的索引;对于df.iloc[],其索引方式和ndarray完全一样,既可以以df.iloc[i][j]的方式索引,也可以以df.iloc[i,j]的方式索引,当然也可以直接的df.iloc[i]的方式索引。
因此,综上可知,对于DtaFrame对象,其只有直接的df[][]索引和ndarray不一样,此时DataFrame先索引的是列,而不是行,也没有df[i,j]的索引方法,但是对于切片索引以及df.iloc的索引方法,和ndarray完全一样;此外,DataFrame还有df.loc的标签索引方法。