『python系列』用索引函数loc和iloc筛选行列

相信大部分朋友最开始在使用Pandas的索引函数时,很容易混淆loc()、iloc()这两个函数的用法,我也是这样,这篇文章就来搞清楚它们之间的区别,扎实数据分析的代码基本功。

1. 函数介绍

  • loc:基于标签,用行名、列名进行索引。常用切片(如df.loc[‘行1′:’行3’])或者列表(如df.loc[[‘行1′,’行2’]])形式进行索引。
  • iloc:基于位置,用行号、列号进行索引。即integer-location,i代表int,因此iloc一般用整数来索引,如df.iloc[0:3]。

可通过help函数或者访问Pandas官网来获取函数说明,比如:

  • help(pandas.DataFrame.iloc)
  • pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html#

2. 函数应用示例

  • 构造示例数据集
import pandas as pddf = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9], [10,11,12]],                   index=['行1','行2','行3','行4'],                   columns=['列1','列2','列3'])
图片

以下罗列了行列筛选的常用场景,并在每个场景中,分别给出df.loc()和df.iloc()这两种不同方式的实现代码。

  • 行选择
'''筛选1行 & 返回Series'''df.loc['行1'] df.iloc[0]'''筛选1行 & 返回DataFrame'''df.loc[['行1']]df.iloc[[0]]'''筛选多行'''df.loc[['行1','行4']]df.iloc[[0,3]]'''连续筛选多行'''df[0:3]df.loc['行1':'行3']df.iloc[0:3]'''条件筛选多行'''df[df['列1']>=5]df.loc[df['列1']>=5]df.loc[lambda df: df['列1']>=5]
  • 列选择
'''筛选1列 & 返回Series'''df['列1'] df.loc[:,'列1']df.iloc[:,0]'''筛选1列 & 返回DataFrame'''df[['列1']]df.loc[:,['列1']] #注意df.loc['列1'] 会报错,loc列筛选需要加上行df.iloc[:,[0]]'''筛选多列'''df.loc[:,['列1','列3']]df.iloc[:,[0,2]]'''连续筛选多列'''df.loc[:,'列1':'列3']df.iloc[:,0:3]
  • 行列同时选择
'''筛选多行+多列'''df.loc[['行1','行3'],['列1','列3']]df.iloc[[0,2],[0,2]]'''连续筛选多行+多列'''df.loc['行1':'行3','列1':'列3'] #都用切片df.loc['行1':'行3',['列1','列2','列3']] #切片+列表df.iloc[0:3,0:3] #只能使用整数索引 '''返回单label值'''df.loc['行1','列1'] df.iloc[0,0]

除了切片和列表外,还有布尔数组、函数等索引形式,不过一般用的不多。另外还有函数iat和at,它们只能取单个元素,一个使用行、列索引,一个使用行、列名,功能已被iloc和loc覆盖,就不作推荐了。

最后总结一下,取行可以不提列,取列必须提行,可以用一个数字,一个列表或者一个切片来进行行列筛选。

题图来源:网站Pexels

阅读原文

简介:FRM持证人|传播分享反欺诈风控知识。欢迎关注微信公众号:反欺诈攻防战
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“反欺诈攻防战”,分享链接:https://www.zyxiao.com/p/301137    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部