当前位置: 代码网 > it编程>前端脚本>Python > python之loc与iloc的用法及说明

python之loc与iloc的用法及说明

2025年06月27日 Python 我要评论
loc 是 pandas 中用于 基于标签(label-based)的索引选择方法,专门用于按行/列标签精准定位和操作 dataframe 或 series 中的数据。以下是详细解析:一、核心功能1.

loc 是 pandas 中用于 基于标签(label-based)的索引选择方法,专门用于按行/列标签精准定位和操作 dataframe 或 series 中的数据。

以下是详细解析:

一、核心功能

1. 基本语法

df.loc[行标签选择, 列标签选择]
  • 行标签选择:可以是单个标签、标签列表、切片(如 "a":"d")或布尔条件
  • 列标签选择:同上,支持标签筛选

2. 特性

  • 标签优先:索引基于行/列的名称(字符串或数字标签),而非位置
  • 闭区间:切片包含起始和结束标签(与 python 常规切片不同)
  • 支持高级操作:布尔索引、条件过滤、函数调用等

二、典型使用场景

1. 精确提取单值

# 获取行标签为2,列标签为'age'的值
df.loc[2, 'age'] 

2. 选择行范围 + 多列

# 选取行标签从'user1'到'user3',列标签'name'和'score'
df.loc['user1':'user3', ['name', 'score']]

3. 条件筛选

# 选择所有年龄大于30的行,并显示'city'列
df.loc[df['age'] > 30, 'city']

4. 修改数据

# 将行标签为5的'status'列值改为'active'
df.loc[5, 'status'] = 'active'

三、与 iloc 的对比

特性lociloc
索引类型标签(字符串或数字)纯整数位置(0-based)
切片区间闭区间(包含两端)左闭右开(python 标准切片)
允许输入类型标签、布尔数组、条件表达式整数、整数列表、整数切片
示例df.loc['a':'c', 'name']df.iloc[0:3, 1]

四、避坑指南

1. 避免链式赋值

# ❌ 可能引发 settingwithcopywarning
df['age'][df['name'] == 'alice'] = 25  

# ✅ 规范写法
df.loc[df['name'] == 'alice', 'age'] = 25

2. 处理混合索引

当 dataframe 的索引是整数时,lociloc 可能产生歧义:

df = pd.dataframe({'a': [1,2,3]}, index=[10, 20, 30])

# 按标签选择(查找标签为1的行)
df.loc[10]   # ✅ 返回第10标签行

# 按位置选择(查找第0行)
df.iloc[0]   # ✅ 返回第10标签行(位置0)

五、高级用法示例

1. 使用函数筛选

# 选择索引以'2023'开头的行
df.loc[lambda x: x.index.str.startswith('2023')]

2. 多条件复合筛选

# 选择年龄在20-30岁且城市为北京的行
df.loc[(df['age'] >= 20) & (df['city'] == '北京')]

3. 跨列计算赋值

# 当score列大于90时,status设为'a+'
df.loc[df['score'] > 90, 'status'] = 'a+'

六、总结

  • 核心作用:基于标签精准操作数据(查、改、删)
  • 优势:代码可读性高,支持复杂条件筛选
  • 适用场景:数据清洗、条件筛选、动态计算等
# 典型工作流示例
cleaned_data = df.loc[df['quality'] > 0.8, ['id', 'value']]  # 筛选高质量数据
cleaned_data.loc[:, 'value'] *= 100  # 批量修改选中列的值

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com