欢迎大家来到IT世界,在知识的湖畔探索吧!
在 Pandas 库中,loc 和 iloc 是两种核心的数据索引方法,用于从 DataFrame 或 Series 中提取特定数据。它们两者均可以使用df.loc/iloc[行标签,列标签]索引器的方式来选择数据。
- 行标签:可以是单个标签、标签列表、标签切片、布尔数组等,用于指定要选择的行。
- 列标签:同样可以是单个标签、标签列表、标签切片、布尔数组等,用于指定要选择的列。
它们的核心区别在于:
- loc:基于 标签 (Label) 的索引
- iloc:基于 整数位置 (Integer Position) 的索引
以下通过代码示例对比演示两个方法的用法。
1. 准备示例数据
import pandas as pd # 创建示例 DataFrame data = { "姓名": ["张三", "李四", "王五", "赵六"], "年龄": [25, 32, 28, 40], "城市": ["北京", "上海", "广州", "深圳"] } df = pd.DataFrame(data, index=["A", "B", "C", "D"]) print("原始数据:") print(df)
欢迎大家来到IT世界,在知识的湖畔探索吧!
运行结果:
复制
欢迎大家来到IT世界,在知识的湖畔探索吧!原始数据: 姓名 年龄 城市 A 张三 25 北京 B 李四 32 上海 C 王五 28 广州 D 赵六 40 深圳
2. 用法详解
2.1 选择单行数据
选择单行数据时,df.loc/iloc[行标签,列标签]索引器指定行标签,不指定列标签,则会选择整行数据
# 选择索引为 'B' 的行,该行的索引编号为1 print("\nloc 选择单行:") print(df.loc["B"]) # loc方法 print(df.iloc[1]) # iloc方法
运行结果:
欢迎大家来到IT世界,在知识的湖畔探索吧!# 上面的两个方法的运行结果均如下 姓名 李四 年龄 32 城市 上海 Name: B, dtype: object
2.2 选择单列数据
选择单列数据时,df.loc/iloc[行标签,列标签]索引器指定行标签为:,指定需选择的列标签,则会选择整列数据
# 选择城市这一列数据,该列的索引编号为2 print("\nloc 选择单列:") print(df.loc[:,"城市"]) print(df.iloc[:,2])
两个方法的运行结果均为:
欢迎大家来到IT世界,在知识的湖畔探索吧!A 北京 B 上海 C 广州 D 深圳 Name: 城市, dtype: object
2.3 选择不连续的多行数据
选择不连续的多行数据时,df.loc/iloc[行标签,列标签]索引器这时的行标签应为一个列表,里面写入需选择的行标签,列标签则不需指定。
# 选择行标签为B和D这两行数据,行标签编号分别为1和3 print(df.loc[["B","D"]]) print(df.iloc[[1,3]])
两个方法的运行结果均为:
欢迎大家来到IT世界,在知识的湖畔探索吧! 姓名 年龄 城市 B 李四 32 上海 D 赵六 40 深圳
2.4 选择连续的多行数据
选择连续的多行数据时,df.loc/iloc[行标签,列标签]索引器这时的行标签应为一个切片器,确定需选择的行的范围,列标签则不需指定。
# 选择行标签为B到D这两行数据,行标签编号为1到3,观察两个方法选择的数据范围是否一致 print(df.loc["B":"D"]) print(df.iloc[1:3])
loc方法运行结果:
欢迎大家来到IT世界,在知识的湖畔探索吧! 姓名 年龄 城市 B 李四 32 上海 C 王五 28 广州 D 赵六 40 深圳
iloc方法运行结果
姓名 年龄 城市 B 李四 32 上海 C 王五 28 广州
注意:从运行结果来看,loc方法的切片器是左右标签都包含的,而iloc方法的切片器是左包含右不包含的,这点千万要注意。
2.5 选择不连续的多列数据
选择不连续的多行数据时,df.loc/iloc[行标签,列标签]索引器这时的行标签指定为:,列标签为一个列表,里面写入需选择的列标签。
欢迎大家来到IT世界,在知识的湖畔探索吧!# 选择姓名和城市这两列数据,列标签编号分别为0和2 print(df.loc[:,["姓名","城市"]]) print(df.iloc[:,[0,2]])
两个方法的运行结果:
姓名 城市 A 张三 北京 B 李四 上海 C 王五 广州 D 赵六 深圳
2.6 选择连续的多列数据
选择连续的多列数据时,df.loc/iloc[行标签,列标签]索引器的行标签指定为:,列标签为一个切片器,用于确定需选择的数据范围。
欢迎大家来到IT世界,在知识的湖畔探索吧!# 选择姓名到年龄这两列,列编号为0到1 print(df.loc[:,"姓名":"年龄"]) print(df.iloc[:,0:1])
loc方法运行结果:
姓名 年龄 A 张三 25 B 李四 32 C 王五 28 D 赵六 40
iloc方法运行结果
欢迎大家来到IT世界,在知识的湖畔探索吧! 姓名 A 张三 B 李四 C 王五 D 赵六
注意:这里依然存在loc和iloc切片器的有效范围不同的问题,要特别注意。这里iloc方法要选择0到1列数据,应该这样写
print(df.iloc[:,0:2])
这样就可以选择到0到1列数据了。
2.7 选择区域数据
需要选择区域数据时,可以按照需要自由组合列表和切片器来表示行标签和列标签。
欢迎大家来到IT世界,在知识的湖畔探索吧!# 比如需要选择A到C行的姓名和城市的数据,这里行标签是一个连续的行,而城市则不连续的两列 print(df.loc["A":"C",["姓名","城市"]]) print(df.iloc[0:3,[0,2]])
运行结果
姓名 城市 A 张三 北京 B 李四 上海 C 王五 广州
2.8 布尔数组条件筛选
使用布尔数组进行选择时,布尔数组的长度需要与 DataFrame 的行数或列数相匹配,然后将布尔数组传递给 iloc 来选择满足条件的数据。
欢迎大家来到IT世界,在知识的湖畔探索吧!# 筛选年龄大于28的行,并选择姓名和年龄列 row_mask = df["年龄"] > 28 col_mask = [True, True, False] print(df.loc[row_mask, col_mask])
3. loc与 iloc对比
|
特性 |
loc |
iloc |
|
索引类型 |
标签(如 ‘A’, ‘B’) |
整数位置(如 0, 1) |
|
切片包含右边界 |
是(df.loc[‘A’:’C’]) |
否(df.iloc[0:2]) |
|
布尔索引 |
支持 |
支持 |
4. 注意事项
- 当 DataFrame 的索引为整数时,loc 会优先识别为标签而非位置
- 使用 iloc 时负数表示倒数(如 df.iloc[-1] 选择最后一行)
- 混合索引时推荐使用 .values 属性获取 NumPy 数组后再操作
通过灵活组合 loc 和 iloc,可以高效完成 Pandas 数据提取任务。建议根据实际数据特征(索引类型、是否需要位置偏移)选择合适的方法。
写在最后:
学会新知识,人生添精彩!从现在开始,告别迷茫和无措,跟着我一步步掌握实用技能,开启全新可能。点击关注,这里有源源不断的干货教程,有耐心细致的指导,还有和你一样努力上进的小伙伴。让我们一起在成长的道路上互相鼓励,共同进步,成为更好的自己!关注后私信我,获取最新Python系列视频教程,包括零基础入门、项目实战、爬虫、全栈、GUI和数据分析等等。点点关注,超过100G的视频课程等你来拿哦!!!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/124051.html