Python 数据科学库详解:NumPy、Pandas 与 SciPy(2026 最新版)
这三个库是 Python 数据科学与科学计算的基石。它们的关系可以概括为:
- NumPy:底层数值计算引擎(数组基础)
- Pandas:高级数据分析工具(基于 NumPy)
- SciPy:科学计算与高级算法库(基于 NumPy)
1. 版本与安装(2026 年 5 月)
| 库 | 最新稳定版 | 发布日期 | Python 最低要求 | 推荐安装命令 |
|---|---|---|---|---|
| NumPy | 2.4.4 | 2026.03 | 3.10+ | pip install numpy |
| Pandas | 3.0.2 | 2026.03 | 3.11+ | pip install pandas |
| SciPy | 1.17.1 | 2026.02 | 3.10+ | pip install scipy |
推荐环境(使用 conda 或 uv):
conda create -n ds python=3.11
conda activate ds
pip install numpy pandas scipy matplotlib seaborn plotly
2. NumPy —— 数值计算基础
核心概念:ndarray(N 维数组)
主要特性(NumPy 2.x 亮点)
- 高速向量化和广播机制
- 内存连续存储(C 语言实现)
- 丰富的数学、线性代数、随机数、傅里叶变换功能
- 新特性:更强的类型标注支持、StringDType 改进、性能优化
import numpy as np
# 创建数组
arr = np.array([1, 2, 3, 4], dtype=np.float32)
zeros = np.zeros((3, 4))
ones = np.ones((2, 3))
rand = np.random.randn(5, 5) # 标准正态分布
# 广播机制(核心优势)
a = np.array([1, 2, 3])
b = np.array([[10], [20], [30]])
result = a + b # 自动广播
# 高效运算
arr.mean(), arr.std(), arr.sum(axis=0)
np.dot(a, a) # 内积
np.linalg.inv(np.random.rand(3,3)) # 矩阵求逆
性能对比:NumPy 数组比 Python List 快 10~100 倍,尤其在大规模数值计算中。
3. Pandas —— 数据分析利器
核心数据结构:
- Series:带标签的一维数组
- DataFrame:带行索引和列标签的二维表格
Pandas 3.0 重要更新
- 更好的 Arrow 后端支持(更快、更省内存)
- 增强的字符串方法和 nullable 数据类型
- 性能大幅提升
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv', parse_dates=['date'])
df = pd.read_excel('file.xlsx', sheet_name=0)
df = pd.read_sql('SELECT * FROM table', engine)
# 基础探索
df.head()
df.info()
df.describe(include='all')
df.shape
# 数据清洗
df.dropna(subset=['col'])
df.fillna({'col1': 0, 'col2': 'unknown'})
df.drop_duplicates()
# 选择与过滤
df[['col1', 'col2']]
df.loc[df['age'] > 18, ['name', 'score']]
df.query('age > 18 and score > 90')
# 分组聚合(GroupBy 威力)
result = df.groupby(['region', 'category']).agg({
'sales': ['sum', 'mean', 'count'],
'profit': ['max', 'min']
}).round(2)
# 时间序列
df.set_index('date')['sales'].resample('M').sum()
Pandas + NumPy 结合:
Pandas 底层大量使用 NumPy,因此你可以随时用 df.values 或 df.to_numpy() 获取数组进行高速计算。
4. SciPy —— 科学计算与高级算法
SciPy 建立在 NumPy 之上,提供了大量科学、工程领域常用的工具。
主要模块(2026 版)
| 模块 | 主要功能 | 典型用途 |
|---|---|---|
scipy.stats | 统计分布、假设检验、描述统计 | t检验、卡方检验、正态性检验 |
scipy.optimize | 优化、拟合、最小二乘 | 曲线拟合、参数优化 |
scipy.integrate | 数值积分、常微分方程求解 | 物理建模 |
scipy.linalg | 线性代数(比 NumPy 更全面) | 特征值分解、SVD |
scipy.signal | 信号处理 | 滤波、傅里叶变换 |
scipy.interpolate | 插值 | 数据平滑 |
scipy.spatial | 空间数据结构(KDTree 等) | 最近邻 |
scipy.cluster | 聚类分析 | 层次聚类 |
from scipy import stats, optimize, integrate
# 统计检验
t_stat, p_value = stats.ttest_ind(group1, group2)
# 曲线拟合
def func(x, a, b, c):
return a * np.exp(-b * x) + c
popt, pcov = optimize.curve_fit(func, xdata, ydata)
# 数值积分
result, error = integrate.quad(lambda x: np.sin(x)**2, 0, np.pi)
5. 三者协作关系与最佳实践
import numpy as np
import pandas as pd
from scipy import stats
# 典型工作流
df = pd.read_csv('data.csv')
# Pandas 清洗 + 选择
clean = df.dropna().query('value > 0')
# 转为 NumPy 做高速计算
data = clean['value'].to_numpy()
normalized = (data - data.mean()) / data.std()
# SciPy 做统计分析
corr, pval = stats.pearsonr(clean['x'], clean['y'])
最佳实践:
- 大尺寸纯数值计算 → 直接用 NumPy
- 带标签的结构化数据(表格、时间序列)→ Pandas
- 高级科学/统计算法 → SciPy
- 超大数据集 → 考虑 Polars(2026 强烈推荐)或 DuckDB
- 类型一致性:Pandas 3.0+ 推荐使用
pd.options.mode.string_storage = 'pyarrow'
6. 学习路径建议
入门(1 周):
- NumPy:数组创建、广播、通用函数(ufunc)
- Pandas:DataFrame 基本操作、GroupBy、合并(merge/join)
进阶(2-4 周):
- NumPy:广播规则、内存视图、向量化技巧
- Pandas:多索引、透视表(pivot_table)、时序处理、自定义聚合
- SciPy:stats + optimize 实战
项目练习:
- Kaggle:Titanic、House Prices
- 真实业务:销售数据分析、A/B 测试、用户行为分析
想深入哪个部分? 我可以立刻展开以下内容:
- NumPy 广播机制与性能优化深度解析
- Pandas 高频操作 100 例 + 避坑指南
- SciPy 统计建模与优化实战
- 三库在机器学习 pipeline 中的协作(与 scikit-learn 结合)
- Polars vs Pandas 全面对比(2026 版)
告诉我你的当前水平和具体需求,我继续给你写下一节!