【Python】一网打尽Pandas中的各种索引 iloc,loc,ix,iat,at,直接索引

一、索引的概述

很多人在使用Pandas选取数据时,总会迷失在data[]、iloc()、loc()、ix()、at()、iat()中,似乎记得,又似乎不记得,每到用时都需要百度,不知所以然的解决了问题,下次继续百度,记忆点基本上非常混乱。本文就是希望能解决这个问题,通过一个简单的DataFrame彻底搞明白这三个函数到底有什么区别,又该怎么使用,希望对你有用。

 

日常使用中,推荐使用loc和iloc进行索引,loc是指location的意思,iloc中的 i 是指integer,这两个方法容易混淆,可以使用特殊方式来加强记忆。

iloc:基于位置,用行号、列号进行索引,i 可以看着 int,因此 iloc 只能用整数来索引,例如data.iloc[0:2,:]

loc :基于标签,用行名、列名进行索引,数据的index经常为整数,因此 loc 的使用范围要远高于iloc,loc可以使用整数切片、名称(index,columns)索引、也可以切片和名称混合使用。例如:data.loc[0:5:,'row1':'row2']

 

我们简单构造一个数据集,在下面的案例中需要用到。

import pandas as pdimport numpy  as npdata = pd.DataFrame(np.arange(25).reshape(5, 5),                   index = ['row1', 'row2','row3','row4','row5'],                   columns=['col1', 'col2','col3','col4', 'col5'])data       col1  col2  col3  col4  col5row1     0     1     2     3     4row2     5     6     7     8     9row3    10    11    12    13    14row4    15    16    17    18    19row5    20    21    22    23    24

二、用列名直接索引 (不推荐)

取一列:data['col1']  即取得第一列,得到的是一个Series对象。

取多列:data[['col1','col2']]

注 意:

用data['row1'] 、data[0]、data[:,0]、data[0,:]、data[:,'col1':'col2'] 统统都会报错的,这类命令只能用来按列名取一列或多列。

data['col1']row1     0row2     5row3    10row4    15row5    20Name: col1, dtype: int32

data[['col1','col2']]       col1  col2row1     0     1row2     5     6row3    10    11row4    15    16row5    20    21

#下面的命令直接应用都会报错,但是用loc 和 iloc 就不会报错data['row1']data[0]data[:,0]data[0,:]data[:,'col1':'col2'] #TypeError: '(slice(None, None, None), 0)' is an invalid key

三、用行号直接索引(不推荐)

data[0:2]代表取得第0行和第1行

注 意:

只取一行的话,要用data[0:1],不能用data[0]。data[0:2,]也会报错

data[0:2]      col1  col2  col3  col4  col5row1     0     1     2     3     4row2     5     6     7     8     9

 

四、iloc按行号、列号来索引(推荐)

1)取一行 :data.iloc[0]  、data.iloc[0,:]

2)取多行 :data.iloc[[0,2]] 、data.iloc[[0,2],:]

3)取连续多行 :data.iloc[0:2] 、data.iloc[0:2,:]

4)取一列 : data.iloc[:,0]

5)取多列 :data.iloc[:,[0,2]]、data.iloc[:,[0,2]]

6)取连续多列 :data.iloc[:,0:2]

注 意:

取行的时候可以不提列,也可以用",:"来指全列

取列的时候必须用":,"来指定全行。

可以使用一个数字来代表一个,可以使用一个列表[a,b]代表多个,也可以使用a:b代表连续多个。

data.iloc[0]col1    0col2    1col3    2col4    3col5    4data.iloc[:,2:4]      col3  col4row1     2     3row2     7     8row3    12    13row4    17    18row5    22    23

 

五、loc按行名、列名来索引(推荐)

1)取一行:data.loc['row1']   、data.loc['row1',:]

2)取多行:data.loc[['row1','row2']]  、data.loc[['row1','row2'],:]

3)取连续多行:data.loc['row1':'row2']   、data.loc['row1':'row2',:]

4)取一列:data.loc[:,'col1']

5)取多列:data.loc[:,['row1','row2']]

6)取连续多列:data.loc[:,'row1':'row2']

注 意:

取行的时候可以不提列,也可以用",:"来指全列。

取列的时候必须用":,"来指定全行。

可以使用一个数字来代表一个,可以使用一个list ['a','b']代表多个,也可以使用'a':'b'代表连续多个。

data.loc[:,'col1':'col3']       col1  col2  col3row1     0     1     2row2     5     6     7row3    10    11    12row4    15    16    17row5    20    21    22
#当索引为整数时,可以用整数进行索引data = pd.DataFrame(np.arange(25).reshape(5, 5),                   columns=['col1', 'col2','col3','col4', 'col5'])   col1  col2  col3  col4  col50     0     1     2     3     41     5     6     7     8     92    10    11    12    13    143    15    16    17    18    194    20    21    22    23    24
data.loc[0:3,'col1':'col3']    col1  col2  col30     0     1     21     5     6     72    10    11    123    15    16    17

 

六、使用iat和at(不推荐)

iat 和 at 只能取单个元素,iat 使用行、列索引,at 使用行、列名,但是其功能被 iloc 和 loc 包含,因此不推荐。

data.iat[1,2]7

 

七、使用ix(不推荐)

ix 相当于 loc 和 iloc 的综合版本,既可以按标签选取,又可以按位置选取,也就是说,ix可以识别你是想按照标签选取,还是按照位置选取。

关于ix,它是先于 iloc 和 loc 产生的,现在基本上用 iloc 和 loc 已经完全能取代 ix ,所以 ix 已经被官方弃用了。就不赘述了。

 

最后总结:(重点!!!!)

正常情况下,推荐使用 iloc 和 loc。最核心的点记住,取行可以不提列,取列必须提行,可以用一个数字,一个list,或者一个区间来取行列。

···  END  ···

往期精彩回顾



适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑黄海广老师《机器学习课程》课件合集
本站qq群851320808,加入微信群请扫码:

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas是一个强大的数据分析工具,在数据处理过程,我们经常需要对DataFrame进行查询操作。Pandas提供了多种查询方法,包括lociloc、at、iatix。以下是对这些方法的详细解释和区别。 1. locloc是通过行标签和列标签进行查询的方法。例如,可以使用df.loc[row_index, column_name]的方式来查询DataFrame的特定值或行列的子集。其row_index可以是单个索引索引列表或布尔数组,column_name可以是单个列名列名列表。loc方法返回的是一个新的DataFrame或Series对象,以便进行进一步的操作。 2. ilociloc是通过行索引和列索引进行查询的方法。它与loc的用法类似,但是不是使用标签,而是使用整数位置来定位数据。例如,可以使用df.iloc[row_index, column_index]的方式来查询DataFrame的特定值或行列的子集。同样地,iloc方法返回的也是一个新的DataFrame或Series对象。 3. at:at用于直接查询DataFrame的单个元素,它使用行标签和列标签来定位。例如,可以使用df.at[row_label, column_label]的方式来获取特定位置的值。与loc方法相比,at方法更快,并且只返回标量值。 4. iatiat用于通过整数位置来查询DataFrame的单个元素。可以使用df.iat[row_index, column_index]的方式来获取特定位置的值。iat方法与at方法的区别与ilocloc的区别相似。 5. ix:在旧版本的pandasix方法用于混合标签和整数位置的查询。它可以使用标签或整数位置来定位数据,但是由于存在一些歧义和性能问题,自从pandas 0.20版本后,被推荐使用lociloc方法来替代ix方法。 总的来说,loc和at是通过标签进行查询的方法,ilociat是通过整数位置进行查询的方法。同时,lociloc返回的是一个新的DataFrame或Series对象,而at和iat只返回标量值。在实际使用,根据需要选择不同的查询方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值