Pandas 数据统计包常用高效函数详解
前言
Pandas 是 Python 环境下最强大的数据操作和分析库之一。它提供了快速、灵活且表达能力强的数据结构,旨在使处理结构化(表格化、多维、异构)和时间序列数据变得简单直观。在日常数据分析工作中,如果没有 Pandas 的支持,处理大规模数据集将变得异常困难。
然而,仅仅知道 Pandas 的存在是不够的,掌握其核心的高效函数能显著提升数据处理的速度和代码的可读性。本文将详细介绍 6 种在 Pandas 中极为常用且高效的函数,通过实际代码示例展示它们的应用场景及注意事项。
Pandas 适用数据类型
Pandas 适用于以下各类数据:
- 具有异构类型列的表格数据,如 SQL 表或 Excel 表;
- 有序和无序(不一定是固定频率)的时间序列数据;
- 带有行/列标签的任意矩阵数据(同构类型或者是异构类型);
- 其他任意形式的统计数据集。
Pandas 擅长处理的特性包括:
- 缺失数据处理:容易处理浮点数据和非浮点数据中的缺失数据(用 NaN 表示);
- 大小可调整性:可以从 DataFrame 或者更高维度的对象中插入或删除列;
- 显式数据对齐:对象可以显式地对齐至一组标签内,Series、DataFrame 等自动对齐数据;
- 灵活的分组功能:对数据集执行拆分 - 应用 - 合并等操作,对数据进行聚合和转换;
- IO 工具:具有鲁棒性的 IO 工具,用于从平面文件(CSV 和 delimited)、Excel 文件、数据库中加载数据,以及从 HDF5 格式中保存/加载数据;
- 时间序列功能:数据范围的生成以及频率转换、移动窗口统计、数据移动和滞后等。
1. read_csv(nrows=n):优化内存读取
问题背景
大多数人都会犯的一个错误是,在不需要完整数据的情况下仍会完整地读取 CSV 文件。如果一个未知的 CSV 文件有 10GB,那么读取整个文件将会非常不明智,不仅要占用大量内存,还会花费很多时间进行 I/O 操作。
解决方案
我们需要做的只是从 CSV 文件中导入几行预览数据,之后根据需要继续导入或使用 chunksize 参数分块读取。
代码示例
import pandas as pd
import io
import requests
# 使用在线数据集作为示例
url = "https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/AirPassengers.csv"
s = requests.get(url).content
# 只读取前 10 行,节省内存
df = pd.read_csv(io.StringIO(s.decode('utf-8')), nrows=10, index_col=0)
print(df.head())
性能提示
对于大型文件,建议结合 chunksize 参数进行迭代处理,避免一次性加载所有数据到内存。
2. map():元素级映射替换
功能说明
map() 函数根据相应的输入来映射 Series 的值。它用于将一个 Series 中的每个值替换为另一个值,该值可能来自一个函数、也可能来自于一个 dict 或 Series。


