Pandas read_csv() 教程:像专业人士一样导入 CSV 文件
Updated on
pandas.read_csv() 是数据分析中最常用的函数之一。无论你是在导入小数据集还是数 GB 级别的大文件,理解 read_csv() 的工作机制,以及如何对其进行优化,都会为你节省大量时间、内存和调试成本。
这篇 2025 年最新版指南会手把手带你掌握如何把 CSV 文件导入得 干净、快速且准确,包括在 Pandas 2.0 中的最佳实践、PyArrow 引擎的使用、编码处理、日期解析以及常见错误的修复方法。
⚡ 想从 DataFrame 秒出可视化图表?
PyGWalker 可以在 Jupyter Notebook 中把你的 Pandas/Polars DataFrame 直接变成一个交互式可视化界面。
拖拽字段 → 即刻生成图表 → 以可视化方式探索数据。
一行代码即可体验:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)| Run in Kaggle (opens in a new tab) | Run in Google Colab (opens in a new tab) | ⭐️ Star PyGWalker (opens in a new tab) |
|---|
什么是 pandas.read_csv()?
read_csv() 是将 CSV 文件导入为 DataFrame(pandas 的核心数据结构)的主要方法。它支持:
- 自定义分隔符
- 缺失值处理
- 类型自动推断或手动控制
- 日期解析
- 大文件流式读取
- 多种解析引擎(Python、C、PyArrow)
- 读取时直接设置索引
- 高效的列选择
Pandas 2.0 引入了更快、更省内存的 PyArrow 后端,使得 CSV 加载更加高效和强大。
基本用法
import pandas as pd
df = pd.read_csv("your_file.csv")
df.head()看起来很简单 —— 但在真实项目中,CSV 往往并不干净。接下来我们会讲解最实用的一些参数。
常用 read_csv() 参数速查表
| 参数 | 说明 |
|---|---|
sep | 列分隔符(默认 ,) |
usecols | 只读取指定列 |
index_col | 指定某列作为索引 |
dtype | 手动指定数据类型 |
parse_dates | 自动解析日期列 |
na_values | 自定义缺失值标记 |
on_bad_lines | 遇到格式错误的行时跳过或警告 |
engine | 选择解析引擎:"python"、"c"、"pyarrow" |
chunksize | 按分块流式读取大文件 |
encoding | 处理编码问题(如 utf-8、latin-1 等) |
1. 设置某列为索引
方案 A —— 读取完成后设置:
df = df.set_index("id")方案 B —— 读取时直接指定:
df = pd.read_csv("file.csv", index_col="id")2. 只读取指定列
这样可以加快读取速度并减少内存占用:
df = pd.read_csv("file.csv", usecols=["name", "age", "score"])3. 处理缺失值
df = pd.read_csv("file.csv", na_values=["NA", "-", ""])4. 自动解析日期
df = pd.read_csv("sales.csv", parse_dates=["date"])Pandas 会自动推断合适的 datetime 格式。
5. 修复编码错误(非常常见)
df = pd.read_csv("file.csv", encoding="utf-8", errors="ignore")如果 UTF-8 解析失败,可以尝试:
df = pd.read_csv("file.csv", encoding="latin-1")6. 使用 PyArrow 引擎(Pandas 2.0+)
为了获得更快的解析速度和更好的内存效率:
df = pd.read_csv("file.csv", engine="pyarrow")也可以结合新的 Arrow-backed dtypes 使用:
df = pd.read_csv(
"file.csv",
engine="pyarrow",
dtype_backend="pyarrow"
)7. 读取大体积 CSV(1GB–100GB)
使用分块读取(chunking):
reader = pd.read_csv("big.csv", chunksize=100_000)
for chunk in reader:
process(chunk)或者只读取必要的列并指定更紧凑的类型:
df = pd.read_csv(
"big.csv",
usecols=["user_id", "timestamp"],
dtype={"user_id": "int32"},
)8. 常见错误及解决方法
❌ UnicodeDecodeError
尝试指定编码:
encoding="latin-1"❌ ParserError: Error tokenizing data
文件中包含格式损坏或不规则的行:
pd.read_csv("file.csv", on_bad_lines="skip")❌ 大文件 MemoryError
可以尝试:
- 使用
chunksize - 使用
usecols减少列 - 使用 Arrow 后端(
dtype_backend="pyarrow")
❌ 分隔符不正确
pd.read_csv("file.csv", sep=";")实战示例:干净地导入数据
df = pd.read_csv(
"sales.csv",
sep=",",
parse_dates=["date"],
dtype={"amount": "float64"},
na_values=["NA", ""],
engine="pyarrow"
)什么时候适合用 CSV?什么时候该避免用 CSV?
CSV 适合:
- 跨平台/跨工具的文件交换
- 简单的数据处理流程
- 小型或中等规模的数据集
但在以下场景你应尽量避免使用 CSV:
- 需要极致的读写速度
- 需要高效压缩
- 需要严格的数据模式(schema)管理
- 需要存储复杂数据类型
对于大规模分析场景,更推荐使用 Parquet 等列式存储格式。
常见问题(FAQs)
如何自动检测分隔符?
pd.read_csv("file.csv", sep=None, engine="python")如何跳过文件开头的几行(如多重表头或说明)?
pd.read_csv("file.csv", skiprows=3)如何读取压缩后的 CSV(zip 文件)?
pd.read_csv("file.csv.zip")总结
pandas.read_csv() 是一个功能强大且非常灵活的 CSV 导入工具,几乎可以覆盖所有 CSV 导入场景 —— 从简单小文件到多 GB 的大型数据集。
只要理解并熟练运用这些常用参数,在 Pandas 2.0+ 中合理利用 PyArrow,并结合列选择、日期解析和错误处理等最佳实践,你的 CSV 数据加载流程会变得既高效又稳健。
更多 Pandas 教程