跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python Pandas 库超详细教程:从入门到精通实战指南

Python Pandas 库核心用法实战指南。涵盖环境配置、数据结构、数据读取、清洗、聚合分析、时间序列处理及性能优化。包含 pandas 3.0+ 新特性如 string dtype,提供从 EDA 到项目模板的完整路径,助力开发者高效处理表格数据。

字节跳动发布于 2026/2/24更新于 2026/9/470 浏览

0. 环境准备(当前推荐)

# 推荐使用最新版(支持 Python 3.11~3.14)
pip install --upgrade pandas pyarrow numpy
# 可选但强烈推荐(加速 + parquet + string dtype 更好支持)
pip install pyarrow fastparquet
import pandas as pd
import numpy as np
print(pd.__version__)  # 建议 ≥ 3.0.0
print(pd.get_option("mode.string_storage"))  # 通常是 'pyarrow_numpy' 或 'python'

pandas 3.0+ 重要变化(必须知道):

  • 默认字符串类型 → string[pyarrow_numpy] 或 string[python](不再是 object)
  • 很多旧的 deprecated API 被彻底移除
  • 性能大幅提升(尤其 groupby、join、字符串操作)

1. 核心数据结构速览(5 分钟掌握本质)

结构对应 Excel一句话本质主要场景内存标签(pandas 3.0+)
Series一列带标签的 1 维数组单列数据、时间序列dtype 可为 Arrow
DataFrame表格带行/列索引的 2 维表几乎所有 tabular 数据—
Index行/列标签不可变数组(可多级)索引、对齐、合并依据—

2. 读取数据(最常用的 10 种方式)

# 经典
df = pd.read_csv("data.csv", encoding="utf-8-sig", dtype_backend="pyarrow")
# 3.0+ 推荐
df = pd.read_excel("sales.xlsx", sheet_name="2025Q4", engine="openpyxl")
df = pd.read_parquet("bigfile.parquet")  # 最推荐大文件格式
df = pd.read_json("api_response.json", lines=True)  # 常见日志/爬虫
df = pd.read_sql("SELECT * FROM orders WHERE year=2025", con=engine)  # 快速预览神器
df = pd.read_csv("huge.csv", nrows=10000)  # 先看前 1 万行
df = pd.read_csv("huge.csv", chunksize=500_000)  # 分块读取(后面会讲)

pandas 3.0+ 推荐始终加上:dtype_backend="pyarrow"(内存少、速度快)

3. 探索数据(EDA 标准 8 步)

df.shape  # (行数,列数)
df.info(memory_usage="deep")  # 类型 + 非空 + 内存
df.describe(percentiles=[.01,.05,.25,.5,.75,.95,.99])  # 极端值敏感
df.nunique()  # 每列唯一值个数
df.isna().sum()/len(df)*100  # 缺失率(%)
# 高频值 Top3
for col in df.select_dtypes("string").columns:
    print(f"\n{col} 前三高频:")
    print(df[col].value_counts(dropna=False).head(3))
df.sample(8)  # 随机 8 行(比 head 更真实)

4. 数据清洗 – 最高频操作一网打尽

# 缺失值处理(2025-2026 主流组合)
df = df.assign(
    age=df["age"].fillna(df["age"].median()),
    income=df["income"].fillna(method="ffill"),  # 向前填充(时间序列常用)
    gender=df["gender"].fillna("Unknown")
).dropna(subset=["user_id","order_date"])  # 关键字段不允许空

# 去重(保留最后一条最常见)
df = df.drop_duplicates(subset=["user_id","event"], keep="last")

# 类型转换(3.0+ 更安全)
df = df.astype({
    "order_date":"datetime64[ns]",
    "price":"float64[pyarrow]",
    "user_id":"string[pyarrow]",
    "category":"category"  # 低基数分类变量省内存
})

# 字符串清洗
df["product_name"] = (
    df["product_name"].str.strip()
    .str.lower()
    .str.replace(r"\s+", " ", regex=True)
    .replace({"iphone 1[456] pro max":"iphone pro max"}, regex=True)
)

# 异常值处理(常见 winsorize)
clip_lower, clip_upper = df["amount"].quantile([0.005,0.995])
df["amount_clip"] = df["amount"].clip(clip_lower, clip_upper)

5. 核心操作 – groupby + agg + transform + pivot 组合拳

# 单表聚合(最常用写法 2025+)
sales_by_month = (
    df.query("year == 2025")
    .assign(month=lambda x: x["order_date"].dt.to_period("M"))
    .groupby(["category","month"], observed=True, dropna=False)
    .agg(
        revenue=("amount","sum"),
        orders=("order_id","nunique"),
        avg_price=("amount","mean"),
        active_users=("user_id","nunique")
    )
    .round(2)
    .reset_index()
)

# transform 经典场景:每组排名、组内占比
df["rank_in_category"] = df.groupby("category")["amount"].rank(ascending=False)
df["pct_of_category"] = df.groupby("category")["amount"].transform(lambda x: x / x.sum())

# 多表合并(left join 最常见)
df = df.merge(
    user_df[["user_id","reg_date","city"]],
    on="user_id",
    how="left",
    suffixes=("","_user")
)

# pivot_table(报表神器)
pd.pivot_table(
    df,
    values="amount",
    index="month",
    columns="category",
    aggfunc=["sum","count"],
    margins=True,
    margins_name="总计"
)

6. 时间序列处理(电商/金融必备)

df["order_date"] = pd.to_datetime(df["order_date"])
# 提取各种时间维度
df["year"] = df["order_date"].dt.year
df["quarter"] = df["order_date"].dt.quarter
df["month"] = df["order_date"].dt.month
df["week"] = df["order_date"].dt.isocalendar().week
df["dayofweek"] = df["order_date"].dt.dayofweek  # 0=周一
df["is_weekend"] = df["order_date"].dt.dayofweek >= 5

# 重采样(日 → 月)
monthly = df.set_index("order_date").resample("ME")["amount"].sum()  # ME = month end

7. 性能优化 – 大数据时代必知(2025-2026 重点)

场景推荐做法加速倍数参考
>1GB csvread_parquet + dtype_backend="pyarrow"3-10×
groupby 很慢.agg() 用元组写法 / pyarrow string2-5×
循环/iterrows改用 vectorized / apply / map10-1000×
内存爆炸category 类型 + downcast + gc.collect30-70% ↓
超大表 joinmerge + sort=False 或 pd.concat—
重复 groupby先 groupby 对象保存,再多次 agg2-4×
# 内存优化示例
df["category"] = df["category"].astype("category")
df["user_id"] = df["user_id"].astype("string[pyarrow]")
df["price"] = pd.to_numeric(df["price"], downcast="float")

8. 真实项目模板(推荐结构)

# project/pipeline.py
import pandas as pd
from pathlib import Path

def load_raw():
    return pd.read_parquet("data/raw/orders_2025.parquet")

def clean(df):
    # 所有清洗逻辑...
    return df

def feature_engineering(df):
    # 时间特征、占比、排名...
    return df

def aggregate(df):
    # 核心宽表 / 报表
    return ...

if __name__ == "__main__":
    df = load_raw()
    df_clean = clean(df)
    df_feat = feature_engineering(df_clean)
    result = aggregate(df_feat)
    result.to_parquet("data/processed/monthly_report.parquet")
    print("Done.")

进阶学习路线建议(当前版)

阶段重点掌握推荐资源(截至当前)
入门read_xxx, select_dtypes, groupby+agg官方 10 分钟入门 + Corey Schafer 视频
中级merge/join, pivot_table, 时间序列,apply/mapReal Python pandas 路径
高级pyarrow backend, MultiIndex, 自定义 agg, stylepandas 3.0 what's new + 用户指南
专家query/numexpr, styler, pandas + polars 对比,daskTowards Data Science 2025 高级文章 + GitHub 源码

目录

  1. 0. 环境准备(当前推荐)
  2. 推荐使用最新版(支持 Python 3.11~3.14)
  3. 可选但强烈推荐(加速 + parquet + string dtype 更好支持)
  4. 1. 核心数据结构速览(5 分钟掌握本质)
  5. 2. 读取数据(最常用的 10 种方式)
  6. 经典
  7. 3.0+ 推荐
  8. 3. 探索数据(EDA 标准 8 步)
  9. 高频值 Top3
  10. 4. 数据清洗 – 最高频操作一网打尽
  11. 缺失值处理(2025-2026 主流组合)
  12. 去重(保留最后一条最常见)
  13. 类型转换(3.0+ 更安全)
  14. 字符串清洗
  15. 异常值处理(常见 winsorize)
  16. 5. 核心操作 – groupby + agg + transform + pivot 组合拳
  17. 单表聚合(最常用写法 2025+)
  18. transform 经典场景:每组排名、组内占比
  19. 多表合并(left join 最常见)
  20. pivot_table(报表神器)
  21. 6. 时间序列处理(电商/金融必备)
  22. 提取各种时间维度
  23. 重采样(日 → 月)
  24. 7. 性能优化 – 大数据时代必知(2025-2026 重点)
  25. 内存优化示例
  26. 8. 真实项目模板(推荐结构)
  27. project/pipeline.py
  28. 进阶学习路线建议(当前版)

更多推荐文章

查看全部
  • 大语言模型(LLM)核心概念与架构解析
  • 基于 WebUploader 与 PHP 的飞行日志分片上传可靠性方案
  • 模拟算法实战:核心概念与经典案例解析
  • AIGC 音乐制作全流程指南:从旋律生成到人声合成
  • DirSearch Web 路径扫描工具安装与实战用法指南
  • Hive 自定义函数输入输出特性:UDF、UDAF 与 UDTF
  • Selenium Web 自动化测试入门与实战指南
  • 2026 年医疗 AI 可信革命全栈实现(上)
  • 哈希表核心原理与 C++ 实现详解
  • Neo4j 图数据库安装与 Cypher 查询实战指南
  • 【CLI-Anything 】让所有软件都能被AI Agent原生调用
  • 2024 大模型秋招面试高频问题与解答总结
  • Apache Dubbo 存在高危反序列化漏洞 CVE-2020-1948
  • 基于 SpringBoot 的超市会员积分管理系统设计与实现
  • Linux Makefile 自动化编译实战指南及进度条实现
  • C++ 类型转换:四种运算符的用法与取舍
  • Claude Code 本地化部署教程:基于 Ollama 实现离线开发
  • Spring AI MCP Server 集成与示例
  • WebRTC 播放器横向测评:H5 直播低延迟方案对比
  • Linux 系统调优:如何修改文件最大句柄数

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online