以下是针对 Pandas Series 数据修改的 iat / loc / iloc 用法详解及实战代码示例:
- 核心方法对比方法索引类型是否支持切片是否支持布尔索引修改效率适用场景 iat[] 整数位置否否⚡️ 最高单个标量值的极速修改 iloc[] 整数位置是是(需整数列表)⚡️ 高按位置索引批量修改 loc[] 标签索引是是⚡️ 中等按标签名或条件筛选修改2. 实战代码示例
示例数据准备import pandas as pd
s = pd.Series([10, 20, 30, 40], index=[‘a’, ‘b’, ‘c’, ‘d’])
print(“原始Series:\n”, s)
(1) iat[] – 单值高速修改# 修改第2个位置(索引1)的值 → 改为99
s.iat = 99
输出:a:10, b:99, c:30, d:40
(2) iloc[] – 按位置批量修改# 修改第1、3位置的值 → 改为[100, 300]
s.iloc[[0, 2]] = [100, 300]
输出:a:100, b:99, c:300, d:40
使用切片修改连续位置
s.iloc[1:3] = [55, 66] # 修改索引1~2 → 改为[55,66]
输出:a:100, b:55, c:66, d:40
(3) loc[] – 按标签或条件修改# 修改特定标签的值
s.loc[[‘a’, ‘d’]] = [200, 400]
输出:a:200, b:55, c:66, d:400
使用条件筛选修改
s.loc[s > 50] = 0 # 将>50的值全改为0
输出:a:0, b:55, c:0, d:0 (b=55保留)
- 关键注意事项
- 索引越界
- iat/iloc :整数索引超出范围 → 触发 IndexError
- loc :标签不存在 → 自动添加新行(可能非预期行为)
- 数据类型一致性
若修改值与原数据类型冲突,Pandas 会强制转换类型:
= pd.Series([1, 2, 3])
s.loc = “hello” # 整个Series转为object类型
` - 视图与副本警告
链式赋值(如s.iloc[1:3] = 5)可能失效,建议直接使用s.iloc = 5。
4. 性能建议
- 单值修改 → 首选
iat(比iloc快 5-10 倍) - 批量修改 → 用
iloc/loc避免循环 - 条件修改 → 用
loc配合布尔表达式
以上代码在 Pandas 1.0+ 环境下测试通过,适用于数据分析中的高效值替换场景。
