Python Pandas 核心用法实战指南
Pandas 是基于 Python 构建的开源数据分析库,提供了强大的数据结构和运算功能。在数据处理领域,它几乎是事实上的标准工具。
Pandas 的核心数据结构主要有两个:
- Series:一维数组,类似 Numpy 的一维 array,但带有索引标签,可存储字符串、布尔值、数字等多种类型。
- DataFrame:二维表格型结构,类似 SQL 表或 Excel 工作表。每列可以是不同的数据类型,拥有列名和行索引。这是 Pandas 最核心的数据结构,支持丰富的操作方法。
环境准备
使用前需导入 Pandas 库,通常约定简写为 pd:
import pandas as pd
Series 数据结构详解
创建与基础属性
Series 从索引 0 开始存储数据。我们可以通过 index 查看下标(标签),通过 values 获取具体的数值。
s = pd.Series([1, 2, 3])
print(s.index) # 输出类似 range(0, 3)
print(s.values) # 直接查看下标的值
注意区分下标和标签。默认情况下,下标是整数索引,而标签是我们自定义的键。如果修改了标签,直接使用下标访问可能会报错,这时需要用到 iloc 和 loc。
loc 与 iloc 的区别
- iloc:基于位置(整数下标),计算机默认的内存记忆。
- loc:基于标签(我们自定义的键),由用户自主指定。
例如,若将索引标签设为 5,则下标 0 对应的值可能不再是 0,而是对应标签 5 的值。理解这一点对于后续的数据筛选至关重要。
数据操作
修改数据:使用 loc 可以通过标签定位并修改值。
s.loc['小张'] = 95
筛选数据:结合逻辑运算符进行条件判断。
# & 代表 and,用于组合多个条件
result = s[(s > 80) & (s < 100)]
算术运算:支持加、减、乘、除等操作。当两个 Series 相加时,若索引不匹配,结果会出现 NaN。可以使用 add 方法配合 fill_value 参数处理缺失值。
# 对齐索引后相加,缺失处填 0
res = s1.add(s2, fill_value=0)
此外,还可以使用 apply() 对数据进行批量处理,例如定义函数判断数据范围。
DataFrame 操作实战
创建与属性
DataFrame 可以看作是由多个 Series 组成的字典。创建时需确保标签(行索引)统一,否则可能报错。虽然允许缺少部分数据,但需保证行列对应关系正确。
df = pd.DataFrame({'姓名': ['A', 'B'], '成绩': [90, 85]})
查看 DataFrame 的属性非常直观:
df.columns:查看列属性。df.index:查看行属性(标签)。df.values:查看底层数据。
切片与提取
提取列:单列直接用 [],多列需用双层 []。
# 提取班级数据
class_data = df['班级']
# 提取学号和成绩
sub_df = df[['学号', '成绩']]
提取行:同样区分 loc(标签)和 iloc(下标)。
切片操作:
- 标签切片:包含起始和结束标签。
- 下标切片:遵循 Python 列表习惯,左闭右开(如
[1:4]不包含索引 4)。 - 行列混合切片:同时指定行和列的范围。
筛选与聚合
筛选数据:先判断生成布尔值,再提取满足条件的数据。
mask = df['成绩'] > 80
filtered_df = df[mask]
统计信息:
head(n):查看前 n 行,默认 5 行,适合大数据量预览。describe():快速获得数据统计摘要(均值、标准差、分位数等)。max(),min(),sum(),mean():常用聚合函数。
删除数据:使用 drop 方法,配合 axis 参数指定删除行还是列。
# axis=0 表示按行删除,axis=1 表示按列删除
df.drop([0, 2], axis=0, inplace=True)
综合案例
计算平均值
在计算 DataFrame 的平均值时,axis 参数的方向容易混淆。简单来说:
axis=0:沿列方向操作(即对每一列求平均,结果是一个 Series,对应每一列的统计)。axis=1:沿行方向操作(即对每一行求平均,结果是一个 Series,对应每个样本的统计)。
# 计算每一行的平均分
row_mean = df.mean(axis=1)
筛选第二大值
这是一个典型的业务场景。我们可以利用 apply 配合 lambda 和 numpy 排序来实现。
import numpy as np
# 选取特定列,应用匿名函数
second_largest = df.loc[:, '考试 1':'考试 3'].apply(
lambda x: np.sort(x)[-2]
)
这里 np.sort(x) 进行升序排列,取倒数第二个元素即为第二大的值。这种写法在处理复杂筛选逻辑时非常高效。
掌握这些核心用法,基本能覆盖日常数据分析 80% 的场景。实际开发中,建议多结合官方文档查阅具体函数的参数细节。


