人工智能之数据分析 Pandas
第十章 知识总结
前言
本文系统梳理了 Pandas 的核心知识点,内容覆盖从基础操作到进阶技巧的关键概念、高频函数与实用方法。适用于快速回顾学习内容、准备技术面试或作为日常开发中的参考手册。
一、核心数据结构
Pandas 主要围绕两种核心数据结构展开操作:
- Series:一维带标签数组,类似于带有索引的 NumPy 数组,通常用于表示单列数据。
Series - DataFrame:二维表格型结构,具有行索引(index)和列标签(columns),是实际应用中最常用的数据形式。
DataFrame
绝大多数数据处理任务都基于这两个对象进行构建与操作。
二、数据读写(I/O)
Pandas 支持多种文件格式的读取与写入,常见如下:
| 格式 | 读取方法 | 写入方法 |
|---|---|---|
| CSV | | |
| Excel | | |
| JSON | | |
| SQL | | |
| Parquet | | |
常用参数包括:
encoding , dtype , parse_dates , usecols , index_col这些参数可控制编码、分隔符、缺失值识别、索引列设置等行为。
三、数据查看与基本信息
在开始分析前,了解数据的基本情况至关重要:
df.head() / .tail() # 查看前/后几行数据 df.shape # 返回 (行数, 列数) df.info() # 显示各列名称、非空数量、数据类型及内存使用 df.describe() # 提供数值型列的统计摘要(均值、标准差、分位数等) df.dtypes # 查看每列的数据类型 df.columns / df.index # 获取列名列表与行索引对象
四、数据选择与索引
灵活选取子集是数据操作的核心能力之一:
| 方法 | 说明 | 示例 |
|---|---|---|
| 选择单一列,返回 Series 类型 | |
| 选择多个列,需使用双层括号以返回 DataFrame | |
| 基于标签的切片索引,包含结束位置 | |
| 基于整数位置的索引,不包含末尾元素 | |
| 通过布尔条件筛选满足要求的行 | |
注意避免链式赋值问题,推荐使用 .loc 或 .iloc 进行明确赋值:
.loc[condition, 'col'] = value
五、数据清洗(Data Cleaning)
原始数据常存在质量问题,常见的清洗任务包括:
| 问题类型 | 处理方式 |
|---|---|
| 缺失值 | , , , |
| 重复值 | , |
| 异常值 | 采用 IQR 法、3σ 原则或依据业务逻辑进行过滤 |
| 类型错误 | , , |
| 格式混乱 | , ,支持正则表达式替换 |
| 列名不规范 | , |
建议清洗流程顺序为:初步概览 → 处理缺失值 → 去重 → 异常检测 → 类型修正 → 数据标准化。
六、数据变换与应用
对已有字段进行加工生成新特征是数据分析的重要环节:
| 操作类型 | 实现方法 |
|---|---|
| 列间运算 | |
| 条件赋值 | 或 |
| 分箱离散化 | , |
| 映射替换 | , |
| 自定义函数应用 | (按行/列执行),(逐元素,已弃用) |
| 链式新增列 | 推荐使用 |
| 分组内标准化 | |
七、分组聚合(GroupBy)
分组分析是探索性数据分析的核心手段,基本语法如下:
# 单列分组并计算均值
df.groupby('部门')['工资'].mean()
# 多列多函数聚合
df.groupby('部门').agg({
'工资': ['mean', 'max'],
'姓名': 'count'
})
# 使用命名聚合(Pandas ≥ 0.25 推荐)
df.groupby('部门', as_index=False).agg(
平均工资=('工资', 'mean'),
人数=('姓名', 'size')
)
GroupBy 操作本质遵循三步模式:Split → Apply → Combine,即先拆分数据、再分别应用函数、最后合并结果。
八、数据合并与重塑
当需要整合多个数据源时,常用以下操作:
| 操作类型 | 函数 | 说明 |
|---|---|---|
| 上下拼接(纵向) | | |
| 左右拼接(横向) | | 类似 SQL 中的连接操作 |
| SQL 风格连接 | | 支持 inner/left/right/outer 四种连接方式 |
| 宽表转长表 | | 也称为“逆透视”操作 |
| 长表转宽表 | / | 可用于创建透视表 |
九、时间序列处理
针对时间相关数据,常用处理步骤包括:
# 将字符串转换为 datetime 类型 df['date'] = pd.to_datetime(df['date']) # 提取年、月、日等时间属性 df['year'] = df['date'].dt.year
此外还可提取星期、小时、季度等信息,并支持时间索引对齐、重采样(resample)、滚动窗口计算等功能。
十、相关性与统计分析
Pandas 提供内置方法进行基础统计分析:
- 计算列之间的皮尔逊相关系数:
df.corr() - 获取协方差矩阵:
df.cov() - 分组统计、累积计算、移动平均等均可直接调用相应方法完成。
十一、数据可视化(基础)
结合 Matplotlib 或 Seaborn,Pandas 可直接绘制图表:
df.plot(kind='line') # 折线图 df.plot(kind='bar') # 柱状图 df.plot(kind='hist') # 直方图 df.plot(kind='scatter') # 散点图
图形展示有助于快速理解数据分布与趋势。
十二、性能优化技巧
- 优先使用向量化操作而非循环
- 合理选择数据类型(如使用 category 类型节省内存)
- 避免频繁复制数据,利用视图操作提升效率
- 大数据集考虑使用
chunksize分块读取 CSV 文件 - 启用
eval()和query()加快复杂表达式计算
十三、高频函数速查表
以下为常用函数汇总(按功能分类):
- 查看数据:head(), tail(), info(), describe()
- 索引操作:loc, iloc, at, iat
- 缺失处理:isna(), dropna(), fillna()
- 去重:duplicated(), drop_duplicates()
- 分组聚合:groupby(), agg(), transform()
- 合并操作:concat(), merge(), join()
- 时间处理:to_datetime(), dt.strftime(), resample()
- 应用函数:apply(), map(), applymap()
十四、最佳实践总结
- 始终检查数据类型是否正确
- 清洗阶段保留原始数据副本
- 使用链式操作提高代码可读性(配合 pipe)
- 命名清晰,注释关键逻辑
- 对大型数据集进行采样测试后再全量运行
学习路径建议
- 掌握 Series 与 DataFrame 基础操作
- 熟悉数据导入导出与查看方法
- 练习索引选择与条件筛选
- 深入理解 GroupBy 机制
- 掌握数据清洗与转换技巧
- 学习合并、重塑与时间序列处理
- 结合可视化工具输出分析结果
- 优化代码性能,形成良好编程习惯
后续
本章内容作为 Pandas 知识体系的总结归纳,可作为阶段性复习材料持续回顾。随着项目实践深入,建议结合真实场景不断迭代技能树。
通过 Pandas 对时间序列数据进行处理时,可以方便地提取日期中的月份和星期信息:
df['month'] = df['date'].dt.month
df['weekday'] = df['date'].dt.dayofweek
接着可对时间序列按特定频率重采样。例如,将数据以月为单位进行汇总统计:
df.set_index('date').resample('M').sum() # 按月求和
时间序列分析是 Pandas 的核心优势之一。
相关性与统计分析
在数据分析过程中,了解变量之间的关系至关重要。可通过皮尔逊方法计算相关性矩阵:
df.corr(method='pearson')
同时获取数据的描述性统计指标,如均值、标准差及指定分位数:
df.mean(), df.std(), df.quantile(0.75)
对于分类变量,使用交叉表分析其分布情况:
pd.crosstab(df['性别'], df['是否购买'])
基础数据可视化
Pandas 提供了便捷的数据绘图功能,可用于快速探索性数据分析(EDA):
df.plot(kind='line')—— 绘制折线图df.plot(kind='bar')—— 绘制柱状图df.plot(kind='hist')—— 绘制直方图df.plot(kind='box')—— 绘制箱线图df.plot.scatter(x='A', y='B')—— 绘制散点图
category
虽然 Pandas 适合快速查看数据趋势,但更精细美观的图表建议结合 Seaborn 或 Plotly 实现。
性能优化技巧
为了提升处理效率,尤其是在面对大规模数据集时,应采用以下策略:
| 技巧 | 说明 |
|---|---|
| 选择合适的数据类型 | 合理设置 dtype 可有效节省内存占用 |
| 向量化操作 | 避免使用 for 循环,优先使用内置函数实现高效运算 |
| 避免链式赋值 | 使用安全的赋值方式防止 SettingWithCopyWarning 警告 |
| 分块读取大文件 | 利用 chunksize 参数逐步加载超大文件 |
| 使用加速库 | 借助 numba 或 cython 加快复杂表达式的执行速度 |
| 及时删除无用列 | 释放不必要的内存空间,提升运行效率 |
| 考虑替代工具 | 如 Dask、Modin 支持并行计算,Polars 性能更高 |
Int8
float32
+
np.where
.loc
read_csv(..., chunksize=10000)
eval
query
df.drop()
高频函数速查表
| 类别 | 核心函数 |
|---|---|
| 创建 | , |
| 查看 | , , |
| 筛选 | , , , |
| 排序 | , |
| 缺失值处理 | , , |
| 去重 | , |
| 聚合操作 | , |
| 数据合并 | , |
| 字符串操作 | , |
| 时间处理 | , |
最佳实践总结
- 优先使用向量化操作,避免显式循环
- 明确设定数据类型,减少内存消耗
- 数据清洗前置,确保分析质量
- 使用推荐的方式进行赋值,避免出现警告信息
- 对大文件采取分块处理机制
- 运用链式编程提高代码可读性
- 借助可视化手段辅助理解数据结构与分布特征
.loc
df.pipe().assign().query()
学习路径建议
基础 → 数据读写 → 索引选择 → 清洗 → 聚合 → 合并 → 时间序列 → 可视化 → 性能优化
记住:Pandas 不仅要求“会用”,更要“用对”才能发挥最大效能。
掌握上述内容后,你已经具备中级以上的 Pandas 应用能力,能够胜任绝大多数常规数据分析任务。


雷达卡


京公网安备 11010802022788号







