Pandas数据索引与选择技术详解
概述
在数据科学项目中,高效地访问和操作数据是核心技能之一。本文基于Python数据科学手册中的内容,深入讲解Pandas库中Series和DataFrame对象的数据索引与选择技术。
Series数据选择
Series作为Pandas的一维数据结构,提供了多种数据访问方式,我们可以从两个角度来理解它:
1. 类字典操作
Series的行为与Python字典非常相似,可以通过键值对的方式访问数据:
import pandas as pd
data = pd.Series([0.25, 0.5, 0.75, 1.0], index=['a', 'b', 'c', 'd'])
# 字典式访问
print(data['b']) # 输出: 0.5
# 检查键是否存在
print('a' in data) # 输出: True
# 获取所有键
print(data.keys()) # 输出: Index(['a', 'b', 'c', 'd'], dtype='object')
# 添加新元素
data['e'] = 1.25
2. 类数组操作
Series也支持NumPy风格的数组操作,包括切片、布尔掩码和花式索引:
# 显式索引切片(包含结束点)
print(data['a':'c'])
# 隐式整数索引切片(不包含结束点)
print(data[0:2])
# 布尔掩码
print(data[(data > 0.3) & (data < 0.8)])
# 花式索引
print(data[['a', 'e']])
索引器:loc与iloc
当Series使用整数作为索引时,可能会产生混淆。Pandas提供了明确的索引器:
loc
:基于显式标签的索引iloc
:基于隐式整数位置的索引
data = pd.Series(['a', 'b', 'c'], index=[1, 3, 5])
# loc使用显式标签
print(data.loc[1]) # 'a'
print(data.loc[1:3]) # 包含结束点
# iloc使用隐式位置
print(data.iloc[1]) # 'b'
print(data.iloc[1:3]) # 不包含结束点
DataFrame数据选择
DataFrame是二维数据结构,可以视为共享相同索引的Series集合或结构化数组。
1. 类字典操作
可以像访问字典一样访问DataFrame的列:
area = pd.Series({'California': 423967, 'Texas': 695662})
pop = pd.Series({'California': 38332521, 'Texas': 26448193})
data = pd.DataFrame({'area': area, 'pop': pop})
# 字典式列访问
print(data['area'])
# 属性式列访问
print(data.area)
# 两种方式访问的是同一对象
print(data.area is data['area']) # True
2. 类数组操作
DataFrame也支持类似二维数组的访问方式:
# 使用loc进行标签索引
print(data.loc['California']) # 获取一行
print(data.loc['California':'Texas', 'pop']) # 行和列切片
# 使用iloc进行位置索引
print(data.iloc[0]) # 第一行
print(data.iloc[:2, 1]) # 前两行,第二列
3. 其他索引技巧
- 布尔索引:
data[data.pop > 20000000]
- 赋值操作:
data['density'] = data.pop / data.area
- 删除列:
del data['area']
最佳实践
- 优先使用
loc
和iloc
进行明确索引,避免混淆 - 复杂操作可以分步进行,提高代码可读性
- 注意显式索引(包含结束点)和隐式索引(不包含结束点)的区别
- 链式操作可能导致不可预期的结果,建议使用临时变量
掌握这些索引技术将大大提高你在数据分析和处理中的效率和准确性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考