目录
一、单级索引
1. loc方法、iloc方法、[]操作符
最常用的索引方法可能就是这三类,其中iloc表示位置索引,loc表示标签索引,[]也具有很大的便利性,各有特点
(a)loc方法
① 单行索引:
import numpy as np
import pandas as pd
df = pd.read_csv('joyful-pandas/data/table.csv',index_col='ID')
df.head()
首先进行数据集的读取操作。
然后我们在进行索引的相关操作。
df.loc[1103]
② 多行索引:
(注意:所有在loc中使用的切片全部包含右端点!这是因为如果作为Pandas的使用者,那么肯定不太关心最后一个标签再往后一位是什么,但是如果是左闭右开,那么就很麻烦,先要知道再后面一列的名字是什么,非常不方便,因此Pandas中将loc设计为左右全闭)
③ 单列索引:
④ 多列索引
⑤函数式索引:
df[lambda x:['Math','Physics']].head()
(b)iloc方法(注意与loc不同,切片右端点不包含)
1.单行索引
df.iloc[3]
2.多行索引
df.iloc[3:5]
3.单列索引
df.iloc[:,3].head()
4.多列索引
df.iloc[:,7::-2].head()
5.函数式索引
df.iloc[lambda x:[3]].head()
iloc中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔Series,如果要用就必须如下把values拿出来
df.iloc[(df['School']=='S_1').values].head()
(c) [ ]操作符
1.Series的[]操作
① 单元素索引:
s = pd.Series(df['Math'],index=df.index)
s[1101]
② 多行索引:
s[0:4]
#使用的是绝对位置的整数切片,与元素无关,这里容易混淆
③ 函数式索引:
s[lambda x: x.index[16::-6]]
#注意使用lambda函数时,直接切片(如:s[lambda x: 16::-6])就报错,此时使用的不是绝对位置切片,而是元素切片,非常易错
④ 布尔索引:
2.DataFrame的[]操作
① 单行索引:
df[1:2]
#这里非常容易写成df['label'],会报错
#同Series使用了绝对位置切片
#如果想要获得某一个元素,可用如下get_loc方法:
② 多行索引:
#用切片,如果是选取指定的某几行,推荐使用loc,否则很可能报错
df[3:5]
③ 单列索引:
df['School'].head()
④ 多列索引:
df[['School','Math']].head()
⑤函数式索引:
df[lambda x:['Math','Physics']].head()
小节:一般来说,[]操作符常用于列选择或布尔选择,尽量避免行的选择
二. 布尔索引
1.布尔符号:'&','|','~':分别代表和and,或or,取反not
df[(df['Gender']=='F')&(df['Address']=='street_2')].head()
df[(df['Math']>85)|(df['Address']=='street_7')].head()
df[~((df['Math']>75)|(df['Address']=='street_1'))].head()
loc和[]中相应位置都能使用布尔列表选择:
上面介绍的是关于索引方面常见的问题,具体的代码和数据集都已经放在我的github:pandas_02基础索引代码。