Python 数据分析:Pandas+NumPy 超详细教程

📝 本章学习目标:从零掌握 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 两大核心对象

  1. Series:带索引的一维数组
  2. 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() 保存到本地查看


十、性能优化技巧

  1. 尽量用向量化,少用 for 循环
  2. 数据量大时用 astype 缩小内存
  3. 读取大文件用 chunks 分块
  4. 分类数据用 astype ('category')
  5. 避免频繁复制,用 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 分钟,分章节阅读
  • 代码逐行复制运行
  • 先模仿再改写
  • 用真实小数据练习

十三、课后练习

  1. 用 NumPy 生成 1000 个随机数,计算均值、方差、最值
  2. 构造一个学生成绩 DataFrame,计算平均分、筛选不及格者
  3. 读取一份 CSV,完成缺失值 / 重复值处理并分组统计
  4. 绘制柱状图 + 折线图并保存

十四、参考资料

相关推荐
dragen_light2 小时前
气象数据下载-Climate Data Store
python
许杰小刀2 小时前
Python网络请求库,从 requests 到 httpx
开发语言·python·httpx
ZC跨境爬虫2 小时前
Scrapy实战爬取5sing网站:Pipeline优化+全流程踩坑复盘,从报错到数据落地
前端·爬虫·python·scrapy
ZhuNian的学习乐园2 小时前
LLM智能体调度:从ReAct到多智能体调度
人工智能·python·深度学习
喵叔哟2 小时前
6.【.NET10 实战--孢子记账--产品智能化】--认证与安全包
python·安全·flask
小鱼~~3 小时前
Jupyter Notebook 最常用快捷键
python·jupyter
wgzrmlrm743 小时前
如何从SQL中提取年份或月份:EXTRACT与日期函数用法
jvm·数据库·python
web3.08889993 小时前
淘宝、京东、1688 拍立淘图搜 API 均返回 JSON 格式
python·json
IT莫染3 小时前
用脚本解放双手!我写了个WorkBuddy自动签到工具
python