📝 本章学习目标:从零掌握 NumPy 数值计算与 Pandas 数据处理核心能力,可独立完成数据读取、清洗、转换、分析、可视化全流程,代码可直接复制运行。
一、引言:为什么 Pandas+NumPy 是数据分析标配
在 Python数据分析领域,NumPy 负责底层数值计算 ,Pandas 负责高层数据结构与业务分析,二者组合是数据从业者的必备工具。
1.1 背景与意义
- NumPy:提供多维数组、向量化运算、线性代数、随机数等基础能力,速度比原生 Python 快 10~100 倍。
- Pandas:基于 NumPy 构建,提供 Series、DataFrame 数据结构,支持 Excel/CSV/ 数据库读写、缺失值处理、分组聚合、时间序列等实战功能。
- 市场现状:金融、电商、运营、科研、机器学习等场景 90% 以上数据任务依赖 Pandas+NumPy。
1.2 本章结构概览
plaintext
环境搭建 → NumPy核心 → Pandas核心 → 数据清洗 → 数据分析 → 可视化 → 实战案例 → 常见问题 → 总结
二、环境搭建与基础配置
2.1 安装命令(手机 / 电脑通用)
bash
运行
# 安装基础库
pip install numpy pandas matplotlib openpyxl
2.2 导入约定(行业标准写法)
python
运行
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 手机端适配:不弹出窗口
plt.switch_backend('AGG')
三、NumPy 核心教程(数值计算地基)
3.1 核心概念
- ndarray:NumPy 多维数组,同质、连续、向量化运算。
- 维度:0 维 (标量)、1 维 (向量)、2 维 (矩阵)、3 维 +(张量)。
- 优势:避免循环、内存高效、支持广播、内置数学函数。
3.2 创建数组
python
运行
python
# 1. 从列表创建
arr1 = np.array([1,2,3,4])
arr2 = np.array([[1,2],[3,4]])
# 2. 快速创建
np.zeros((3,3)) # 全0
np.ones((2,4)) # 全1
np.arange(0,10,2) # 等差
np.linspace(0,1,5) # 等分
np.random.randn(5) # 标准正态
3.3 数组属性(手机必记)
python
运行
python
arr = np.array([[1,2,3],[4,5,6]])
print(arr.shape) # 形状 (2,3)
print(arr.ndim) # 维度 2
print(arr.dtype) # 类型 int64
print(arr.size) # 元素数 6
3.4 索引与切片
python
运行
python
# 一维
a = np.array([10,20,30,40])
print(a[1]) # 20
print(a[1:3]) # [20 30]
# 二维 [行,列]
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(b[0,1]) # 2
print(b[:,1]) # 第2列 [2 5 8]
print(b[1:,:2]) # 切片
3.5 向量化运算(核心优势)
python
运行
python
a = np.array([1,2,3])
b = np.array([4,5,6])
print(a + b) # [5 7 9]
print(a * 2) # [2 4 6]
print(np.sum(a))# 6
print(np.mean(a))# 2
3.6 广播机制
不同形状数组可自动对齐计算,无需手动扩展:
python
运行
python
a = np.array([[1,2,3],[4,5,6]])
b = np.array([10,20,30])
print(a + b)
3.7 常用数学函数
python
运行
python
x = np.array([1,2,3,4])
np.sqrt(x) # 平方根
np.exp(x) # 指数
np.log(x) # 对数
np.max(x) # 最大值
np.argmax(x) # 最大值索引
四、Pandas 核心教程(数据分析主力)
4.1 两大核心对象
- Series:带索引的一维数组
- DataFrame:带行列索引的二维表格(Excel 表)
4.2 Series 创建与操作
python
运行
python
# 创建
s = pd.Series([10,20,30,40], index=['a','b','c','d'])
# 访问
print(s['b'])
print(s[1])
print(s.mean())
4.3 DataFrame 创建(最常用)
python
运行
python
# 字典创建
data = {
'姓名':['张三','李四','王五'],
'年龄':[22,25,30],
'薪资':[5000,7000,10000]
}
df = pd.DataFrame(data)
print(df)
4.4 文件读写(实战必备)
python
运行
python
# 读取CSV
df = pd.read_csv('data.csv')
# 读取Excel
df = pd.read_excel('data.xlsx')
# 保存
df.to_csv('out.csv', index=False)
df.to_excel('out.xlsx', index=False)
4.5 数据快速查看
python
运行
python
df.head() # 前5行
df.info() # 结构信息
df.describe() # 统计描述
df.shape # 行列数
df.columns # 列名
df.dtypes # 类型
4.6 数据选择(手机必背)
python
运行
python
# 选列
df['姓名']
df[['姓名','薪资']]
# 选行(标签/位置)
df.loc[0]
df.iloc[0]
# 条件筛选
df[df['年龄']>25]
df[(df['薪资']>6000) & (df['年龄']<30)]
五、数据清洗(数据分析 80% 工作量)
5.1 缺失值处理
python
运行
python
# 查看缺失
df.isnull().sum()
# 删除缺失行
df = df.dropna()
# 填充缺失
df = df.fillna(0)
df['薪资'] = df['薪资'].fillna(df['薪资'].mean())
5.2 重复值处理
python
运行
python
df.duplicated().sum() # 重复数
df = df.drop_duplicates()
5.3 数据类型转换
python
运行
python
df['年龄'] = df['年龄'].astype('int')
df['日期'] = pd.to_datetime(df['日期'])
5.4 字段重命名与删除
python
运行
python
df = df.rename(columns={'旧名':'新名'})
df = df.drop(columns=['无用列1','无用列2'])
5.5 字符串处理
python
运行
python
df['姓名'] = df['姓名'].str.strip()
df['姓名'] = df['姓名'].str.replace(' ','')
df['姓名'] = df['姓名'].str.contains('张')
六、数据分析核心操作
6.1 分组聚合(groupby)
python
运行
python
# 按部门统计薪资
df.groupby('部门')['薪资'].agg(['mean','max','count'])
# 多指标聚合
df.groupby('部门').agg({
'薪资':'mean',
'年龄':'max'
})
6.2 排序
python
运行
python
df.sort_values(by='薪资', ascending=False)
df.sort_index()
6.3 数据透视表(pivot_table)
python
运行
python
pd.pivot_table(df,
values='薪资',
index='部门',
columns='学历',
aggfunc='mean')
6.4 数据合并
python
运行
python
# 横向合并
pd.concat([df1,df2], axis=1)
# 纵向合并
pd.concat([df1,df2], axis=0)
# 关联(类似SQL join)
pd.merge(df1,df2, on='id', how='left')
6.5 时间序列处理
python
运行
python
df['月份'] = df['日期'].dt.month
df['季度'] = df['日期'].dt.quarter
df.resample('M', on='日期')['薪资'].sum()
七、数据可视化(Matplotlib 极简版)
7.1 折线图
python
运行
python
plt.figure(figsize=(8,4))
df['薪资'].plot(kind='line', title='薪资趋势')
plt.savefig('line.png', bbox_inches='tight')
plt.close()
7.2 柱状图
python
运行
python
df.groupby('部门')['薪资'].mean().plot(kind='bar')
plt.savefig('bar.png')
plt.close()
7.3 直方图
python
运行
python
df['年龄'].plot(kind='hist', bins=10)
plt.savefig('hist.png')
plt.close()
八、完整实战案例(电商销售数据分析)
8.1 需求
读取销售数据 → 清洗 → 统计月度销售额 → 分析商品销量 → 输出结果与图表
8.2 完整代码
python
运行
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.switch_backend('AGG')
# 1. 读取数据
df = pd.read_csv('sales.csv')
# 2. 数据清洗
df['date'] = pd.to_datetime(df['date'])
df = df.dropna(subset=['amount','goods'])
df = df.drop_duplicates()
# 3. 月度销售额
df['month'] = df['date'].dt.to_period('M')
month_sale = df.groupby('month')['amount'].sum()
# 4. 商品销量TOP10
goods_top = df.groupby('goods')['amount'].sum().sort_values(ascending=False).head(10)
# 5. 输出结果
print('月度销售额:')
print(month_sale)
print('商品TOP10:')
print(goods_top)
# 6. 绘图
month_sale.plot(kind='line', title='月度销售额', figsize=(10,4))
plt.savefig('month_sale.png', bbox_inches='tight')
plt.close()
goods_top.plot(kind='bar', title='商品销量TOP10', figsize=(10,5))
plt.savefig('goods_top.png', bbox_inches='tight')
plt.close()
九、常见问题与解决方案
9.1 报错:模块不存在
解决:重新安装 pip install --upgrade numpy pandas
9.2 读取 Excel 失败
解决:安装引擎 pip install openpyxl xlrd
9.3 中文乱码
python
运行
python
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
9.4 数据类型错误
解决:用 pd.to_numeric/pd.to_datetime 强制转换
9.5 手机端无法显示图片
解决:用 plt.savefig() 保存到本地查看
十、性能优化技巧
- 尽量用向量化,少用 for 循环
- 数据量大时用 astype 缩小内存
- 读取大文件用 chunks 分块
- 分类数据用 astype ('category')
- 避免频繁复制,用 inplace=True
十一、学习路线与职业建议
11.1 入门(1-2 周)
- NumPy 数组、运算、索引
- Pandas 读写、查看、筛选
11.2 进阶(1 个月)
- 清洗、分组、透视、合并
- 时间序列、可视化
11.3 实战(2-3 个月)
- 电商 / 运营 / 金融真实数据集
- 自动化报表、数据分析报告
11.4 就业方向
- 数据分析师
- 运营分析师
- 业务分析师
- 数分工程师
十二、本章小结
12.1 核心要点
- NumPy:多维数组、向量化、广播、数学计算
- Pandas:Series/DataFrame、读写、清洗、分组、透视
- 流程:读取→清洗→分析→可视化→输出
- 原则:向量化优先、少循环、重复用
12.2 手机学习建议
- 每天 15 分钟,分章节阅读
- 代码逐行复制运行
- 先模仿再改写
- 用真实小数据练习
十三、课后练习
- 用 NumPy 生成 1000 个随机数,计算均值、方差、最值
- 构造一个学生成绩 DataFrame,计算平均分、筛选不及格者
- 读取一份 CSV,完成缺失值 / 重复值处理并分组统计
- 绘制柱状图 + 折线图并保存
十四、参考资料
- NumPy 官方文档:https://numpy.org/doc/
- Pandas 官方文档:https://pandas.pydata.org/docs/
- Python for Data Analysis( Wes McKinney )
- 掘金、知乎、B 站免费实战教程