上一篇
Python中loc函数用法详解 - pandas数据选择指南
- Python
- 2025-08-01
- 1888
Python中loc函数用法详解
什么是loc函数?
在pandas库中,loc函数是一种基于标签的数据选择方法,用于从DataFrame或Series中精确地选择数据子集。
与iloc(基于整数位置索引)不同,loc使用行和列的标签进行数据选择,使代码更易读、更直观。
基本语法
loc函数的基本语法如下:
dataframe.loc[row_selection, column_selection]
其中:
- row_selection:行的选择条件(标签、标签列表、切片或布尔数组)
- column_selection:列的选择条件(同上)
创建示例DataFrame
在演示loc用法前,我们先创建一个示例DataFrame:
import pandas as pd
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [25, 32, 28, 35, 29],
'城市': ['北京', '上海', '广州', '深圳', '杭州'],
'薪资': [15000, 22000, 18000, 28000, 21000]
}
df = pd.DataFrame(data, index=['A001', 'A002', 'A003', 'A004', 'A005'])
print(df)
该DataFrame显示如下:
姓名 | 年龄 | 城市 | 薪资 | |
---|---|---|---|---|
A001 | 张三 | 25 | 北京 | 15000 |
A002 | 李四 | 32 | 上海 | 22000 |
A003 | 王五 | 28 | 广州 | 18000 |
A004 | 赵六 | 35 | 深圳 | 28000 |
A005 | 钱七 | 29 | 杭州 | 21000 |
选择单行或多行
使用行标签选择特定行:
# 选择单行
print(df.loc['A002'])
# 输出:
# 姓名 李四
# 年龄 32
# 城市 上海
# 薪资 22000
# Name: A002, dtype: object
# 选择多行(使用列表)
print(df.loc[['A001', 'A004']])
# 输出:
# 姓名 年龄 城市 薪资
# A001 张三 25 北京 15000
# A004 赵六 35 深圳 28000
# 使用切片选择连续的行(包含结束位置)
print(df.loc['A002':'A004'])
# 输出:
# 姓名 年龄 城市 薪资
# A002 李四 32 上海 22000
# A003 王五 28 广州 18000
# A004 赵六 35 深圳 28000
选择单列或多列
在loc中指定列选择:
# 选择单列(所有行)
print(df.loc[:, '城市'])
# 输出:
# A001 北京
# A002 上海
# A003 广州
# A004 深圳
# A005 杭州
# Name: 城市, dtype: object
# 选择多列
print(df.loc[:, ['姓名', '薪资']])
# 输出:
# 姓名 薪资
# A001 张三 15000
# A002 李四 22000
# A003 王五 18000
# A004 赵六 28000
# A005 钱七 21000
# 使用列切片
print(df.loc[:, '姓名':'城市'])
# 输出:
# 姓名 年龄 城市
# A001 张三 25 北京
# A002 李四 32 上海
# A003 王五 28 广州
# A004 赵六 35 深圳
# A005 钱七 29 杭州
同时选择行和列
组合行和列选择:
# 选择特定行和列
print(df.loc[['A001', 'A003'], ['姓名', '年龄']])
# 输出:
# 姓名 年龄
# A001 张三 25
# A003 王五 28
# 使用行切片和列选择
print(df.loc['A002':'A004', '城市':'薪资'])
# 输出:
# 城市 薪资
# A002 上海 22000
# A003 广州 18000
# A004 深圳 28000
条件选择
使用布尔条件进行高级筛选:
# 选择薪资大于20000的所有行
print(df.loc[df['薪资'] > 20000])
# 输出:
# 姓名 年龄 城市 薪资
# A002 李四 32 上海 22000
# A004 赵六 35 深圳 28000
# A005 钱七 29 杭州 21000
# 多条件筛选(使用 & 和 |)
# 选择年龄在30岁以下且薪资大于20000的员工
print(df.loc[(df['年龄'] < 30) & (df['薪资'] > 20000)])
# 输出:
# 姓名 年龄 城市 薪资
# A005 钱七 29 杭州 21000
# 条件选择特定列
# 选择所有上海员工的姓名和薪资
print(df.loc[df['城市'] == '上海', ['姓名', '薪资']])
# 输出:
# 姓名 薪资
# A002 李四 22000
使用loc修改数据
loc不仅可以查询数据,还可以用于修改数据:
# 修改单个值
df.loc['A001', '薪资'] = 16000
print(df.loc['A001'])
# 输出:
# 姓名 张三
# 年龄 25
# 城市 北京
# 薪资 16000
# 修改整列
df.loc[:, '年龄'] = df['年龄'] + 1
print(df['年龄'])
# 输出:
# A001 26
# A002 33
# A003 29
# A004 36
# A005 30
# 条件修改
# 给所有薪资低于20000的员工加薪10%
df.loc[df['薪资'] < 20000, '薪资'] = df['薪资'] * 1.1
print(df)
# 输出:
# 姓名 年龄 城市 薪资
# A001 张三 26 北京 17600.0
# A002 李四 33 上海 22000.0
# A003 王五 29 广州 19800.0
# A004 赵六 36 深圳 28000.0
# A005 钱七 30 杭州 21000.0
loc与iloc的区别
特性 | loc | iloc |
---|---|---|
索引类型 | 基于标签 | 基于整数位置 |
切片行为 | 包含结束位置 | 不包含结束位置 |
索引方式 | 使用行/列名 | 使用行/列序号 |
布尔索引 | 支持 | 支持 |
修改数据 | 支持 | 支持 |
适用场景 | 有意义标签的数据集 | 无意义标签或需要位置索引 |
最佳实践与注意事项
避免链式赋值
不要使用以下方式修改数据,可能会导致不可预测的结果:
# 不推荐的方式(链式赋值)
df['薪资'][df['城市'] == '北京'] = 18000
# 推荐使用loc
df.loc[df['城市'] == '北京', '薪资'] = 18000
设置新索引
如果DataFrame没有有意义的索引,可以使用set_index创建:
# 设置"姓名"列为索引
df.set_index('姓名', inplace=True)
处理重复索引
当索引有重复值时,loc选择会返回所有匹配项:
# 如果有重复索引
df.loc['A001'] # 可能返回多个结果
总结
pandas的loc函数是数据处理中不可或缺的工具,主要特点包括:
- 基于标签的数据选择方法
- 支持单行/列、多行/列、切片和布尔索引
- 可用于数据查询和修改
- 比链式索引更安全可靠
- 特别适合处理具有有意义索引的数据集
掌握loc函数的使用,可以大大提高数据处理的效率和代码可读性。
本文由JingShe于2025-08-01发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://liuhe.jltcw.com/20257034.html
发表评论