章节导读

数据选择与索引是 pandas 操作的核心。pandas 提供了多套互补的索引系统:标签索引与位置索引、基础方括号与高级查询表达式、单层与多层索引等。理解每种方式的适用场景与边界行为,是高效使用 pandas 的基础。

本章包含:


索引方式总览

方式语法适用场景
方括号df['col']、s[0]列选择、简单切片
属性访问df.col交互式探索(慎用)
标签索引.loc[]按标签选择(包含端点)
位置索引.iloc[]按整数位置选择(不含端点)
快速标量.at[] / .iat[]单个标量快速访问
布尔索引df[mask]条件筛选
查询表达式df.query()字符串表达式过滤
表达式运算df.eval()列计算与新建
条件替换where() / mask()保留形状的值替换
交叉选择df.xs()MultiIndex 剥离层级
名称过滤df.filter()按名称模式选择
类型过滤df.select_dtypes()按数据类型选择列
随机抽样df.sample()随机抽取行/列
按位置取值df.take()按整数位置数组取值

核心原则速查

选择(读取)语义

操作端点示例
.loc包含结束标签df.loc['a':'c']
.iloc不包含结束位置df.iloc[0:2]
df[1:4]不包含结束位置行 1~3
s['a':'c']包含结束标签标签 a~c

赋值(修改)语义

操作是否安全推荐
df['col'][mask] = x❌ 链式使用 .loc 替代
df.loc[mask, 'col'] = x✅ 推荐总是有效
df.iloc[i, j] = x✅ 推荐总是有效
df.col = x⚠️ 列名冲突时失效使用 df['col'] = x

条件组合

# 必须使用括号包裹每个条件
mask = (df['A'] > 1) & (df['B'] < 10)
 
# 使用集合/区间
df['城市'].isin(['北京', '上海'])
df['年龄'].between(18, 30)
 
# 字符串匹配
df['姓名'].str.contains('张')

MultiIndex 选择

# 完整元组
df.loc[('华东', 2024)]
 
# 部分层级
df.loc['华东']
 
# 跨层切片
df.loc[pd.IndexSlice['华东':'华北', 2023:2024], :]
 
# 交叉选择
df.xs('华东', level='区域', drop_level=False)

常见错误与规避

错误说明正确写法
df[['A'], ['B']]括号传入两个参数df.loc[['A'], ['B']]
df.query('A = 1')单等号 = 非法df.query('A == 1')
df[(df.A > 1) or (df.B < 2)]or 不支持用 |:df[(df.A>1) | (df.B<2)]
df.loc['不存在的标签']不存在抛错df.get / reindex
df['col'][mask] = v链式赋值df.loc[mask, 'col'] = v
s[0](整数索引)歧义s.iloc[0] 或 s.loc[0]

6 items under this folder.