Python 的DataFrame 中,有几种数值定位/取值方式
1. df.at()
2. df.iloc[]
3. df.loc[]
记忆点如下:

- 用于选取数据 : df2=df.loc[参数1,参数2]
- 用于赋值 :df.loc[参数1,参数2]=1
如下一一进行参数解读及示例
1. df.at(索引,列名)
- 该函数只能取某一个元素的值
- 该函数采取, 行索引加列名的方式 进行定位
例子:
df.at(‘a’,’A’) 表示取索引为a,列名称为A所对应的元素的值
2. df.iloc[参数1,参数2]
- 该函数可以取某个元素、某行、某列、多行、多列。
- 该函数采用,行号、列号的方式 或者 布尔列表的方式 进行定位。 参数只能是数字或者布尔型
- 参数2可以省略, 表示取所有行;或者以“:”形式表示取所有列;
- 参数1不可以省略, 以“:”形式表示取所有列;
- 数字列表: 例如[1,3,5],表示取python行(列)顺序上的第1行(列)、第3行(列)、第5行(列)[1]
- 布尔值列表: 例如[True,Flase, True,Flase, True,Flase],表示取为True的行(列), 布尔列表长度一定要跟行(列)的长度一致。
- 单个数字 :例如5,表示取python行(列)顺序上的第5行(列)
- 冒号分隔的开始行号和结束行号 :例如 3:5 ,表示取python行(列)顺序上的第3行(列)至第4行(列) 【不包含python顺序含义上的第5行(列)】
例子:
###取相应的行,列为所有的列df.iloc[2] 取第3行,取出后格式为Series(python的顺序是从0开始的,0表示第1,2表示第3,3表示第4,以此类推)
df.iloc[[2]] 取第3行,取出后格式为DatFrame
df.iloc[2:3] 取第3行,取出后格式为DatFrame
df.iloc[2:4] 取
第3行至第4行,取出后格式为DatFrame
df.iloc[[2,4]] 取
第3行和第5行,取出后格式为DatFrame
df.iloc[[2,4,5]] 取第3行、第5行、第6行,取出后格式为DatFrame
df.iloc[[True,True,Flase,False,False,False]] 取为True所对应的行
###取相应的行,同时取相应的列 [行选取的参数,列选取的参数] 行和列参数形式均可以在4种参数表达形式中选择,不互斥,也就是有16种组合的取值方式。df.iloc[2,3] 取第3行第4列的值(python的顺序,2表示3行,3表示4列)
df.iloc[[0, 2], [1, 3]] 取第1行和第3行,然后再取第2列和第4列
df.iloc[2:5,3] 取第3行至第5行,再取第4列的值
df.iloc[:,3] 取第4列的值
df.iloc[2:5,3:6] 取第3行至第5行,再取第4列至第8列的值
df.iloc[[True,True,Flase,False,False,False],3:6] 取为True的行,再取第4列至第6列的值
df.iloc[[True,True,Flase,False,False,False],[True,True,Flase,False,False,False]] 取为True的行,再取为True的列
3. df.loc[参数1,参数2]
- 该函数可以取某个元素、某行、某列、多行、多列。
- 该函数可用于 查找多重索引或者多重列名 的的数据框。
- 该函数采用, 行索引、列名称 的方式 或者 布尔列表 的方式 进行定位。
- 参数2可以省略, 表示取所有行;或者以“:”形式表示取所有列;
- 参数1不可以省略, 以“:”形式表示取所有列;
- 索引或者列名称列表 :例如[1,3,5],表示取索引(列名称)为1,3,5的行(列)
- 布尔值列表 :[True,Flase, True,Flase, True,Flase],表示取为True的行(列),但是列表长度一定要跟行(列)的长度一致。
- 单个索引或者列名称 :5,表示索引(列名称)为5的行(列)
- 冒号分隔的开始索引(列名称)和结束索引(列名称) :3:5 表示取索引(列名称)为3至5 【包含5】 的行(列),字符串就按照字符串的方式排序
例子:
###取相应的行,列为所有的列df.loc[2] 取索引为2的行,取出后格式为series
df.loc[[2]] 取索引为2的行,取出后格式为DatFrame
df.loc['a':'c'] 取索引为a至c的行,取出后格式为DatFrame,字符串就按照字符串的方式排序
df.loc[['a','b']] 取索引为a,和b的行,取出后格式为DatFrame
df.loc[[False, False, True]] 取值为True的行,(布尔列表的长度必须为dataframe的长度)
###取相应的行,同时取相应的列 [行选取的参数,列选取的参数] 参数有4种形式,行和列的选取参数均可以在4种形式中选择,不互斥,也就是有16种组合的取值方式。df.loc[[False, False, True],['a','c']] 取值为True的行,再取列名称为a和c的列(布尔列表的长度必须为dataframe的长度)
df.loc[['A','C'],'a':'c'] 取值索引值为A、C的行,再取列名称为a至c的列(布尔列表的长度必须为dataframe的长度)
df.loc['A':'C','a'] 取值索引值A至C的行,再取列名称为a的列(布尔列表的长度必须为dataframe的长度)
另外,df.loc[]支持取多重索引的值或者定位位置 ###取相应的行,列为所有的列 把(第一重索引,第二重索引)当做一个索引值来看,套用上面的同样的规则; 把(第一重列名,第二重列名)当做一个列名来看,套用上面的同样的规则;df.loc[(第一重索引,第二重索引)] 取索引为(第一重索引,第二重索引)的行,取出后格式为series
df.loc[[(第一重索引,第二重索引)]] 取索引为(第一重索引,第二重索引)的行,取出后格式为DatFrame
df2.loc[(a,'ii'):(c,'ii')] 取索引(a,'ii')至索引(c,'ii')的行
df2.loc[(a,'ii'):c] 取索引(a,'ii')至索引c的行,索引c的意思为所有第一重索引为c的值。
参考
- ^(python的顺序是从0开始的,0表示第1,2表示第3,3表示第4,以此类推)