天天看点

dataframe 赋值不成功_Python DataFrame 中选取数据及数据赋值方法( iloc 与loc的区别)...

Python 的DataFrame 中,有几种数值定位/取值方式

1. df.at()

2. df.iloc[]

3. df.loc[]

记忆点如下:

dataframe 赋值不成功_Python DataFrame 中选取数据及数据赋值方法( iloc 与loc的区别)...
应用:
  1. 用于选取数据 : df2=df.loc[参数1,参数2]
  2. 用于赋值 :df.loc[参数1,参数2]=1

如下一一进行参数解读及示例

1. df.at(索引,列名)

  • 该函数只能取某一个元素的值
  • 该函数采取, 行索引加列名的方式 进行定位

例子:

df.at(‘a’,’A’) 表示取索引为a,列名称为A所对应的元素的值

2. df.iloc[参数1,参数2]

  • 该函数可以取某个元素、某行、某列、多行、多列。
  • 该函数采用,行号、列号的方式 或者 布尔列表的方式 进行定位。 参数只能是数字或者布尔型
  • 参数2可以省略, 表示取所有行;或者以“:”形式表示取所有列;
  • 参数1不可以省略, 以“:”形式表示取所有列;
【画重点】参数的表达方式有以下四种
  1. 数字列表: 例如[1,3,5],表示取python行(列)顺序上的第1行(列)、第3行(列)、第5行(列)[1]
  2. 布尔值列表: 例如[True,Flase, True,Flase, True,Flase],表示取为True的行(列), 布尔列表长度一定要跟行(列)的长度一致。
  3. 单个数字 :例如5,表示取python行(列)顺序上的第5行(列)
  4. 冒号分隔的开始行号和结束行号 :例如 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. 索引或者列名称列表 :例如[1,3,5],表示取索引(列名称)为1,3,5的行(列)
  2. 布尔值列表 :[True,Flase, True,Flase, True,Flase],表示取为True的行(列),但是列表长度一定要跟行(列)的长度一致。
  3. 单个索引或者列名称 :5,表示索引(列名称)为5的行(列)
  4. 冒号分隔的开始索引(列名称)和结束索引(列名称) :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的值。

参考

  1. ^(python的顺序是从0开始的,0表示第1,2表示第3,3表示第4,以此类推)