在Pandas DataFrames中选择行和列使用iloc,loc和ix

2025-11-29技术教程8991

在Pandas DataFrames中选择行和列使用iloc,loc和ix

 

在Pandas中有三种主要的选择来实现选择和索引活动,这可能会造成混淆。这篇文章介绍的三个选择案例和方法是:

  1. 通过行号选择数据(.iloc)
  2. 通过标签或条件语句(.loc)选择数据
  3. 采用混合方法(.ix)进行选择(Pandas 0.20.1中已弃用)

资料设定

这篇受其他教程启发的博客文章介绍了这些操作的选择活动。本教程适用于一般的数据科学情况,通常我会发现自己:

  1. 数据框中的每一行代表一个数据样本。
  2. 每列都是一个变量,通常被命名。我很少选择没有名称的列。
  3. 我需要经常从数据框中选择相关的行以进行建模和可视化活动。

对于刚起步的人,PythonPandas库提供了高性能,易于使用的数据结构和数据分析工具,用于处理“系列”和“数据框”中的表格数据。在使您的数据处理变得更加轻松方面,它非常出色。我之前已经写过关于 使用Pandas进行数据分组和汇总的文章

本博客文章中讨论的iloc和loc方法的摘要。iloc和loc是用于从Pandas数据框中检索数据的操作。

Pandas数据框的选择和索引方法

对于这些探索,我们将需要一些样本数据–我从www.briandunning.com下载了uk-500样本数据集此数据包含虚构的英国字符的人工名称,地址,公司和电话号码。要继续进行操作,您可以在此处下载.csv文件 加载数据如下(此图来自Jupyter笔记本 在蟒蛇Python的安装):

import pandas as pd
import random
 
# read the data from the downloaded CSV file.
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')
# set a numeric id for use as an index for examples.设置数字ID用作示例索引。
data['id'] = [random.randint(0,1000) for x in range(data.shape[0])]
 
data.head(5)

 

从CSV文件加载的示例数据。

1.使用“ iloc”选择Pandas数据

Pandas数据框iloc索引器用于 基于整数位置的索引/按位置选择

iloc索引器的语法是data.iloc [,],对于R用户来说,这肯定会引起混乱。Pandas中的“ iloc”用于按编号选择行和列,顺序是它们出现在数据框中。您可以想象每行的行号从0到总行数(data.shape [0]),而iloc []允许基于这些数字进行选择。列也是如此(范围从0到data.shape [1])

iloc有两个“参数” –行选择器和列选择器。例如:

# Single selections using iloc and DataFrame使用iloc和DataFrame进行单个选择
# Rows:行
data.iloc[0] # first row of data frame (Aleshia Tomkiewicz) - Note a Series data type output.数据帧的第一行(Aleshia Tomkiewicz)-注意Series数据类型的输出
data.iloc[1] # second row of data frame (Evan Zigomalas)数据帧的第二行(Evan Zigomalas)
data.iloc[-1] # last row of data frame (Mi Richan) 数据帧#最后一行(祢日婵)
# Columns:列
data.iloc[:,0] # first column of data frame (first_name) 数据帧的第一列(first_name)
data.iloc[:,1] # second column of data frame (last_name) 数据帧的第二列(last_name)
data.iloc[:,-1] # last column of data frame (id) 数据帧的最后一列(id)

 

可以使用.iloc索引器一起选择多个列和行。

# Multiple row and column selections using iloc and DataFrame 使用iloc和DataFrame选择多个行和列
data.iloc[0:5] # first five rows of dataframe 数据帧的前五行
data.iloc[:, 0:2] # first two columns of data frame with all rows 数据帧的前两列,所有行
data.iloc[[0,3,6,24], [0,5,6]] # 1st, 4th, 7th, 25th row + 1st 6th 7th columns.第一,第四,第七,第25行+第一第六第七列。
data.iloc[0:5, 5:8] # first 5 rows and 5th, 6th, 7th columns of data frame (county -> phone1). 前5行和第五,第六,数据帧的第七列(county- > PHONE1)。

 

以这种方式使用iloc时,要记住两个陷阱:

  1. 请注意,.iloc在选择一行时返回Pandas Series,在选择多行或选择完整列时返回Pandas DataFrame。为了解决这个问题,如果需要DataFrame输出,则传递一个单值列表。

     

    使用.loc或.iloc时,可以通过将列表或单个值传递给选择器来控制输出格式。

  2. 当以这种方式选择多列或多行时,请记住在选择中,例如[1:5],所选行/列将从第一个数字到 一个减去第二个数字。例如[1:5]将变为1,2,3,4。[x,y]从x变为y-1。

实际上,除非我想要数据帧的第一行(.iloc [0])或最后一行(.iloc [-1]),否则我很少使用iloc索引器。

2.使用“ loc”选择Pandas数据

Pandas loc索引器可与DataFrames一起用于两种不同的用例:

  • a。)通过标签/索引选择
  • b。)选择具有布尔/条件查找的行

位置索引器的使用语法与iloc相同:data.loc [,]。

2a。使用.loc的基于标签/基于索引的索引

使用loc方法进行的选择基于数据帧的索引(如果有)。使用 df.set_index()在DataFrame上设置索引的情况下,.loc方法将根据任何行的索引值直接进行选择。例如,将测试数据框的索引设置为人员“ last_name”:

data.set_index("last_name", inplace=True)
data.head()

姓氏设置为样本数据帧上的索引集现在有了索引集,我们可以使用.loc [例如:

 

使用.loc带有Pandas的索引选择来选择单行或多行。请注意,第一个示例返回一个系列,第二个示例返回一个DataFrame。您可以通过将单元素列表传递给.loc操作来实现单列DataFrame。

使用列名选择带有.loc的列。在我的大多数数据工作中,通常我都命名列,并使用这些命名选择。

使用.loc索引器时,使用字符串列表或“:”切片按名称引用列。

您可以选择索引标签的范围–选择 data.loc ['Bruch':'Julio'] 将返回数据框中“ Bruch”和“ Julio”的索引条目之间的所有行。 。现在,以下示例应该有意义:

# Select rows with index values 'Andrade' and 'Veness', with all columns between 'city' and 'email' 选择索引值为“ Andrade”和“ Veness”的行,所有列都在“ city”和“ email”之间
data.loc[['Andrade', 'Veness'], 'city':'email']
# Select same rows, with just 'first_name', 'address' and 'city' columns 选择相同的行,仅包含“ first_name”,“ address”和“ city”列
data.loc['Andrade':'Veness', ['first_name', 'address', 'city']]
 
# Change the index to be based on the 'id' column 将索引更改为基于“ id”列
data.set_index('id', inplace=True)
# select the row with 'id' = 487 选择'id'= 487的行
data.loc[487]

 

请注意,在最后一个示例中,data.loc [487]  (索引值为487的行)不等于data.iloc [487]  (数据中的第487行)DataFrame的索引可以不按数字顺序和/或字符串或多值。

2b。使用.loc的布尔/逻辑索引

使用data.loc []与布尔数组进行条件选择是我与Pandas DataFrames一起使用的最常见方法。使用布尔索引或逻辑选择,您可以将数组或True / False值系列传递给.loc索引器,以选择Series具有True的行

在大多数使用情况下,您将根据数据集中不同列的值进行选择。

例如,语句data ['first_name'] =='Antonio']生成一个Pandas系列,其“数据” DataFrame中的每一行都具有True / False值,其中first_name所在的行具有“ True”值是“安东尼奥”。这些类型的布尔数组可以直接传递给.loc索引器,如下所示:

使用布尔“真/假”系列选择Pandas数据框中的行-选择所有名称为“ Antonio”的行。

和以前一样,可以将第二个参数传递给.loc以从数据帧中选择特定的列。同样,列是通过loc indexer的名称来引用的,并且可以是单个字符串,列列表或切片“:”操作。

 

通过将列名传递给.loc []的第二个参数,可以选择带有loc的多列请注意,在选择列时,如果仅选择一列,则.loc运算符将返回一个Series。对于单列DataFrame,请使用一个元素列表来保留DataFrame格式,例如:

 

如果将单个列的选择作为字符串进行选择,则将从.loc返回一系列。传递列表以返回DataFrame。

为了清楚起见,请确保您了解以下.loc选择的其他示例:

    
# Select rows with first name Antonio, # and all columns between 'city' and 'email' 选择名字为Antonio的行,以及#在'city'和'email'之间的所有列
data.loc[data['first_name'] == 'Antonio', 'city':'email']
 
# Select rows where the email column ends with 'hotmail.com', include all columns 选择电子邮件列以'hotmail.com'结尾的行,包括所有列
data.loc[data['email'].str.endswith("hotmail.com")]   
 
# Select rows with last_name equal to some values, all columns 选择last_name等于某些值的行,所有列
data.loc[data['first_name'].isin(['France', 'Tyisha', 'Eric'])]   
       
# Select rows with first name Antonio AND hotmail email addresses 选择名字为Antonio和hotmail电子邮件地址的行
data.loc[data['email'].str.endswith("gmail.com") & (data['first_name'] == 'Antonio')] 
 
# select rows with id column between 100 and 200, and just return 'postal' and 'web' columns 选择id列在100到200之间的行,并仅返回“ postal”和“ web”列
data.loc[(data['id'] > 100) & (data['id'] <= 200), ['postal', 'web']] 
 
# A lambda function that yields True/False values can also be used. 也可以使用产生True / False值的lambda函数。
# Select rows where the company name has 4 words in it.
data.loc[data['company_name'].apply(lambda x: len(x.split(' ')) == 4)] 
 
# Selections can be achieved outside of the main .loc for clarity: 为了清楚起见,可以在主.loc之外进行选择:
# Form a separate variable with your selections: 根据您的选择形成一个单独的变量:
idx = data['company_name'].apply(lambda x: len(x.split(' ')) == 4)
# Select only the True values in 'idx' and only the 3 columns specified: 仅选择'idx'中的True值,并且仅指定3列:
data.loc[idx, ['email', 'first_name', 'company']]

 

逻辑选择和布尔系列也可以传递给pandas DataFrame的通用[]索引器,并给出相同的结果:data.loc [data ['id'] == 9] == data [data ['id'] == 9]。

3.使用ix选择Pandas数据

注意从0.20.1版开始,ix索引器在最新版本的Pandas中已被弃用

IX []索引是的.loc和.iloc的混合体。通常,ix是基于标签的,并且仅用作.loc索引器。但是,.ix还支持传递整数的整数类型选择(如.iloc中一样)。这仅在DataFrame的索引不是基于整数的情况下有效。ix将接受.loc和.iloc的任何输入。

稍微复杂一点,我更喜欢显式使用.iloc和.loc以避免意外的结果。

举个例子:

# ix indexing works just the same as .loc when passed strings ix传递字符串时,索引工作与.loc相同
data.ix[['Andrade']] == data.loc[['Andrade']]
# ix indexing works the same as .iloc when passed integers. 传递整数时,#ix索引的工作方式与.iloc相同
data.ix[[33]] == data.iloc[[33]]
 
# ix only works in both modes when the index of the DataFrame is NOT an integer itself.ix仅在DataFrame的索引本身不是整数时才能在两种模式下工作。

使用.loc在DataFrames中设置值

稍微改变一下语法,实际上就可以在与.loc索引器选择和过滤的语句相同的语句中更新DataFrame。这种特殊的模式使您可以根据不同的条件更新列中的值。设置操作不会复制数据框,而是编辑原始数据。

举个例子:

# Change the first name of all rows with an ID greater than 2000 to "John" #将ID大于2000的所有行的名字更改为“ John”
data.loc[data['id'] > 2000, "first_name"] = "John"

# Change the first name of all rows with an ID greater than 2000 to "John" 将ID大于2000的所有行的名字更改为“ John”
data.loc[data['id'] > 2000, "first_name"] = "John"

 

《在Pandas DataFrames中选择行和列使用iloc,loc和ix.doc》

下载本文的Word格式文档,以方便收藏与打印。

  • ROG玩家国度 枪神10X:9950X3D2+RTX5080旗舰电竞新选择
    07月 03 2026

      想要一步拉满配置,享受旗舰专业电竞硬核实力,ROG玩家国度首款全息光显风扇台式机:ROG枪神10X值得关注。搭载AMD锐龙9 9950X3D2旗舰处理器,掌控巅峰芯力的同时,还配备了ROG夜神旗舰显卡、64GB DDR5+4TB SSD、三区独立散热、AniMeHolo全息光显矩阵等顶尖配置,助力玩家轻松畅玩各类热门3A大作与网游。恰逢618大促活动,购买枪神10X部分地区可享政府补贴,晒单加...

  • 《斗罗大陆:诛邪传说》SSR魂师选择推荐
    07月 03 2026

    斗罗大陆诛邪传说SSR魂师怎么选?斗罗大陆诛邪传说里面其实大家看到的角色,都是从原著他们自身的特性效果当中进行制作,所以在这里大家可以看到自己熟悉的角色当中,运用的还是一些熟悉的力量,斗罗大陆诛邪传说SSR魂师怎么选但是在这里因为数据的改变,会让他们在场景当中有不同的用法,那么在当前大家使用SSR品质魂师的情况下,他们能够带来的功能都是在游戏里面能够达到第一个梯队的强度。 《斗罗大陆:诛邪传说》S...

  • 《绝区零》四星武器选择推荐
    07月 03 2026

    《绝区零》中的四星武器选择是游戏里非常重要的事情,好的四星武器能够解决很多问题,而比较推荐的四星武器就是在零号空洞的商店内兑换的鎏金花信或是强音热望。强音热望当前还没进商店,不过快了,活动限定武器一般会在半年后加入商店。 绝区零什么四星武器好用 绝区零所有角色都有根据自身技能模板所对应的“专武”(包括四星角色)。不过随着版本更新和玩家认知的进化,并非所有角色都是带自身专武最优,请根据版本的变化灵活...

  • 《异人之下》法器选择攻略
    06月 27 2026

    异人之下法器怎么选?这是很多人十分头疼的问题,毕竟只有选对法器,玩家们才能在《异人之下》更顺利地完成尘途百炼挑战,享受无比畅快的对战乐趣。不过大家也无需担心,异人之下手游法器选择攻略会帮为大家带来详细解析,好令大家能了解哪些法器会更适合自己使用,快过来瞧瞧看吧。 《异人之下》法器选择攻略 异人已实装的每件法器都有独特的效果,每位角色至多只能装配三件法器,因此玩家们在搭配时需要根据角色的特性,以及自...

  • 《异人之下》身外身选择攻略
    06月 27 2026

    异人之下身外身怎么选?异人之下手游中身外身系统是参照原著奇门术法设定的局外养成模块,以下是异人之下手游身外身选择攻略,玩家可以为出战的异人装备不同的身外身幻影来获得额外属性加成以及特殊战斗效果,品质和词条搭配的好坏直接决定高难副本的生存与爆发上限。本文主要从身外身基础分类、各类型适用场景、词条优先级、异人适配推荐和资源培养顺序这五个方面进行说明,帮助各位做出最优的配置决策。 《异人之下》身外身选择...

  • 机动战队配件选择推荐
    06月 27 2026

    机动战队配件怎么选,蓝色配件《过载攻击核心》这是在下唯一推荐新人使用的《液压关节》之外的核心配件,毕竟《液压关节》对飞机和坦克没用,队伍里最强的远程输出机体搞一个50级-70级的这个东西,还是挺影响体验的。 机动战队配件选择推荐: 一、白色配件 1、配件分白绿蓝紫4个等级,但是并非所有配件都有上位替代,所以白绿蓝三个档次里都有需要使用的配件 2、白色配件《液压关节》是新人之友,强力建议新人所有机体...

  • 机动战队宠物选择推荐
    06月 27 2026

    机动战队宠物怎么选,这游戏有用的宠物几乎都是星光宠物。星光宠物会随着主线关卡增加而变成主线可以掉落的平民宠物,不过最好用的都不会在主线里掉落。大量星光宠物目前没任何用处,下面只讲解有用处的。 机动战队宠物选择推荐: 一、星光之外的宠物部分 1、普通宠物的主要获得途径是主线远征,因为手打宠物掉率很低,所以新人会觉得宠物难以获取,实际等玩了一阵可以远征主线部分关卡后垃圾宠物就源源不断了……所以千万别用...

  • 《太吾绘卷:天幕心帷》初始特性选择推荐
    06月 27 2026

    《太吾绘卷:天幕心帷》中的初始特性是游戏里非常重要的一个特殊属性,选对了就可以有一个非常好的基础,首先是抓周特性里面最强的毫无疑问是一把小刀,120的武具运用很强,但是2攻的战略点不够平衡,一副人偶全部武学资质+6也很不错,1攻1机的战略点比较平衡。 太吾绘卷天幕心帷初始特性怎么选 抓周特性里面最强的毫无疑问是一把小刀,120的武具运用很强,但是2攻的战略点不够平衡,一副人偶全部武学资质+6也很不...

  • 《火线战姬》宠物选择推荐
    06月 24 2026

    火线战姬宠物怎么选?在火线战姬中的神宠系统很多玩家在前期是接触不到的,如果没有达到相应的门槛,大家在其中没有办法快速解锁这部分的养成,在玩法当中火线战姬宠物选择分享就是多数玩家可以参考的,因为只有大家在60级后才会想到这部分的要求,此时对于各个战宠的能力大家也要确认是否符合当前需要的能力。 《火线战姬》宠物选择推荐 首先是辉日天马,这个宠物其实强度也是很值得大家去投入一点资源的,输出类的神宠当中很...

  • 异环卡厄斯装备选择推荐
    06月 24 2026

    异环卡厄斯装备怎么选,卡厄斯作为相属性站场主 C,装备(弧盘/武器)选择核心围绕‌相属性异能伤害‌与‌暴击伤害‌构建,优先保证技能增益的稳定性。‌下面为大家带来这个角色的装备选择推荐。 异环卡厄斯装备选择推荐: 一、核心武器(弧盘)选择 ‌毕业首选:众人追寻之物(专属)‌ ‌属性‌:高基础攻击力 + ‌24% 暴击率‌副词条。 ‌机制‌:常驻提升‌25% 相属性异能伤害‌;释放「变轨技能」或「极轨...