Pandas 简介 #

什么是数据分析? #

数据分析是将原始数据转化为有价值信息的过程,包括数据收集、清洗、转换、建模和可视化等步骤。好的数据分析能够帮助我们发现数据中的模式、趋势和洞察。

text
┌─────────────────┐
│     原始数据     │
│   杂乱无章      │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   数据清洗       │
│   Pandas 处理    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   数据分析       │
│   统计、建模     │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   洞察与决策     │
│   可视化呈现     │
└─────────────────┘

什么是 Pandas? #

Pandas 是 Python 最流行的数据分析库,名字来源于 “Panel Data”(面板数据)。它提供了两种主要的数据结构:Series(一维)和 DataFrame(二维),能够处理大多数数据分析任务。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                         Pandas                               │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │   Series    │  │  DataFrame  │  │   Index     │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  数据清洗    │  │  数据分析    │  │  数据可视化  │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

Pandas 的历史 #

发展历程 #

text
2008年 ─── Pandas 诞生
    │
    │      Wes McKinney 创建
    │      AQR Capital Management
    │      解决金融数据分析问题
    │
2009年 ─── 开源发布
    │
    │      GitHub 开源
    │      社区开始贡献
    │
2012年 ─── Python 数据分析书籍
    │
    │      Wes McKinney 著书
    │      推广 Pandas 使用
    │
2015年 ─── Pandas 0.17
    │
    │      更好的 NumPy 集成
    │      性能优化
    │
2018年 ─── Pandas 0.23
    │
    │      可空整数类型
    │      改进时间序列
    │
2020年 ─── Pandas 1.0
    │
    │      正式版发布
    │      API 稳定
    │
2023年 ─── Pandas 2.0
    │
    │      Apache Arrow 后端
    │      性能大幅提升
    │
至今   ─── 行业标准
    │
    │      数据分析必备工具
    │      活跃的社区

里程碑版本 #

版本 时间 重要特性
0.1 2008 初始发布,核心数据结构
0.10 2012 时间序列增强
0.17 2015 NumPy 集成优化
0.23 2018 可空整数类型
1.0 2020 API 稳定化
2.0 2023 Arrow 后端、性能提升

为什么选择 Pandas? #

传统数据分析的痛点 #

在使用 Pandas 之前,数据分析面临以下问题:

python
# 传统方式:使用 Python 列表和字典
data = [
    {'name': 'Alice', 'age': 25, 'city': 'New York'},
    {'name': 'Bob', 'age': 30, 'city': 'London'},
    {'name': 'Charlie', 'age': 35, 'city': 'Tokyo'}
]

# 计算平均年龄需要手动循环
total_age = 0
for person in data:
    total_age += person['age']
average_age = total_age / len(data)

# 筛选数据也很繁琐
filtered = [p for p in data if p['age'] > 25]

Pandas 的解决方案 #

python
import pandas as pd

# 使用 DataFrame
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['New York', 'London', 'Tokyo']
})

# 计算平均年龄 - 一行搞定
average_age = df['age'].mean()

# 筛选数据 - 简洁直观
filtered = df[df['age'] > 25]

Pandas 的核心特点 #

1. 强大的数据结构 #

python
import pandas as pd
import numpy as np

# Series - 一维带标签数组
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)

# DataFrame - 二维表格
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': ['a', 'b', 'c'],
    'C': [1.1, 2.2, 3.3]
})
print(df)

2. 灵活的数据处理 #

python
# 数据清洗
df.dropna()                    # 删除缺失值
df.fillna(0)                   # 填充缺失值
df.drop_duplicates()           # 删除重复值

# 数据转换
df['new_col'] = df['A'] * 2    # 新增列
df.rename(columns={'A': 'a'})  # 重命名列

# 数据筛选
df[df['A'] > 1]                # 条件筛选
df.query('A > 1')              # 查询语法

3. 高效的数据分析 #

python
# 描述统计
df.describe()                  # 统计摘要
df.mean()                      # 平均值
df.corr()                      # 相关系数

# 分组聚合
df.groupby('category').sum()   # 分组求和
df.pivot_table(...)            # 透视表

# 时间序列
df.resample('M').mean()        # 月度重采样
df.rolling(7).mean()           # 7日滚动平均

4. 丰富的 IO 支持 #

python
# 读取数据
pd.read_csv('data.csv')        # CSV
pd.read_excel('data.xlsx')     # Excel
pd.read_json('data.json')      # JSON
pd.read_sql(query, conn)       # SQL 数据库

# 写入数据
df.to_csv('output.csv')
df.to_excel('output.xlsx')
df.to_json('output.json')
df.to_sql('table', conn)

Pandas 与其他工具对比 #

Pandas vs NumPy #

特性 Pandas NumPy
数据结构 Series、DataFrame ndarray
标签索引 ✅ 支持 ❌ 仅整数索引
异构数据 ✅ 支持 ❌ 同构
缺失值 ✅ 原生支持 ❌ 需要特殊处理
表格操作 ✅ 丰富 ❌ 有限
性能 极高
适用场景 数据分析 数值计算

Pandas vs Excel #

特性 Pandas Excel
数据量 百万级+ 有限(约100万行)
自动化 完全可编程 需要手动操作
可重复性
复杂计算 Python 全功能 公式有限
学习曲线 中等 平缓
可视化 需配合库 内置丰富
版本控制 Git 友好 困难

Pandas vs R data.frame #

特性 Pandas R data.frame
语言 Python R
生态 Python 数据科学生态 R 统计生态
性能 中等
语法 面向对象 函数式
可视化 Matplotlib/Seaborn ggplot2
机器学习 Scikit-learn caret/tidymodels

Pandas 的应用场景 #

1. 金融分析 #

python
import pandas as pd

# 读取股票数据
df = pd.read_csv('stock_prices.csv', parse_dates=['date'])

# 计算收益率
df['returns'] = df['price'].pct_change()

# 计算移动平均
df['ma_20'] = df['price'].rolling(20).mean()

# 计算波动率
volatility = df['returns'].std() * np.sqrt(252)

2. 数据清洗 #

python
# 处理缺失值
df.dropna(subset=['important_col'])
df.fillna({'col1': 0, 'col2': 'unknown'})

# 处理重复值
df.drop_duplicates()

# 数据类型转换
df['date'] = pd.to_datetime(df['date'])
df['amount'] = df['amount'].astype(float)

3. 商业分析 #

python
# 销售数据分析
sales = pd.read_excel('sales.xlsx')

# 按地区分组
regional_sales = sales.groupby('region')['amount'].sum()

# 月度趋势
monthly = sales.resample('M', on='date')['amount'].sum()

# 产品排名
top_products = sales.groupby('product')['amount'].sum().nlargest(10)

4. 科学研究 #

python
# 实验数据处理
data = pd.read_csv('experiment.csv')

# 描述统计
summary = data.describe()

# 相关性分析
correlation = data.corr()

# 分组比较
grouped = data.groupby('treatment').agg(['mean', 'std'])

Pandas 的核心概念 #

Series(序列) #

python
# 一维带标签数组
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])

# 访问元素
s['a']        # 通过标签
s[0]          # 通过位置
s['a':'c']    # 切片

DataFrame(数据框) #

python
# 二维表格结构
df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'age': [25, 30]
})

# 访问数据
df['name']           # 选择列
df.loc[0]            # 选择行(标签)
df.iloc[0]           # 选择行(位置)
df.loc[0, 'name']    # 选择单元格

Index(索引) #

python
# 行索引
df.index             # 行标签
df.columns           # 列标签

# 设置索引
df.set_index('id')   # 设置某列为索引
df.reset_index()     # 重置索引

# 多层索引
df.set_index(['year', 'month'])

Pandas 的设计哲学 #

1. 数据优先 #

python
# 所有操作围绕数据展开
df.head()          # 查看数据
df.info()          # 数据信息
df.describe()      # 数据统计

2. 链式操作 #

python
# 流畅的链式调用
result = (df
    .dropna()
    .query('age > 18')
    .groupby('city')
    .agg({'salary': 'mean'})
    .sort_values('salary', ascending=False)
)

3. 向量化计算 #

python
# 避免循环,使用向量化操作
df['new_col'] = df['col1'] + df['col2']  # 高效
# 而不是:
# for i in range(len(df)):
#     df.loc[i, 'new_col'] = df.loc[i, 'col1'] + df.loc[i, 'col2']

Pandas 的局限性 #

已知限制 #

text
⚠️ 内存限制
   - 数据需要全部加载到内存
   - 超大数据集需要分块处理

⚠️ 单线程
   - 默认单线程执行
   - 大数据计算可能较慢

⚠️ 数据类型
   - 某些操作会改变数据类型
   - 需要注意类型推断

解决方案 #

python
# 大数据处理
df = pd.read_csv('large.csv', chunksize=10000)
for chunk in df:
    process(chunk)

# 使用 Dask 扩展
import dask.dataframe as dd
ddf = dd.read_csv('very_large.csv')

# 类型优化
df = df.astype({'col1': 'int32', 'col2': 'category'})

学习路径 #

text
入门阶段
├── Pandas 简介(本文)
├── 安装与配置
└── Series 和 DataFrame 基础

进阶阶段
├── 数据选择与过滤
├── 数据清洗
└── 统计分析

高级阶段
├── 分组聚合
├── 合并连接
└── 时间序列

实战阶段
├── 数据分析项目
├── 性能优化
└── 最佳实践

下一步 #

现在你已经了解了 Pandas 的基本概念,接下来学习 安装与配置,开始实际使用 Pandas!

最后更新:2026-04-04