默认不支持Parquet导出是因为pandas不内置编解码能力,需显式安装pyarrow或fastparquet引擎;推荐pip install pyarrow,compression参数控制列块级压缩算法而非文件打包压缩。

直接用 to_parquet() 即可,但必须安装 pyarrow 或 fastparquet 作为引擎,否则会报 ModuleNotFoundError: No module named 'pyarrow'。
为什么默认不支持 Parquet 导出?
Pandas 本身不内置 Parquet 编解码能力,它只是调用底层引擎。没有显式安装依赖时,to_parquet() 会直接失败,而不是降级或提示更友好的错误。
推荐优先装 pyarrow(功能全、兼容好、性能稳):
pip install pyarrow
如果环境受限(如某些嵌入式 Python 发行版),可选 fastparquet,但它对嵌套类型、时区、新 Parquet 标准支持较弱。
立即学习“Python免费学习笔记(深入)”;
导出带压缩的 Parquet 文件:关键参数是 compression
Parquet 的压缩发生在列块(column chunk)级别,不是整个文件打包压缩。所以 compression 参数控制的是内部编码压缩算法,不是 ZIP 那种外壳压缩。
创建 Flask + Vue.js 全栈项目,采用单端口架构、uv 依赖管理、结构化日志和生产级前端设计。当用户要求以下操作时触发:创建新的 Flask+Vue 项目、搭建 Web 应用、构建全栈 Python+Vue 应用、初始化 Flask Web 项目、设置单端口 Flask 前后端项目。触发词:新建项目、创建项目、搭建项目、Flask项目、Vue项目。
-
compression="snappy"(默认):速度快,压缩率中等,最常用 -
compression="gzip":压缩率更高,但 CPU 开销明显增大 -
compression="brotli":压缩率最好,但需要 PyArrow ≥ 5.0 且写入稍慢 -
compression=None:不压缩,适合调试或后续用外部工具统一压缩
示例:
df.to_parquet("data.parquet", compression="gzip")
文件名后缀和分片导出要注意什么?
to_parquet() 对路径处理很直接:
- 路径含
.parquet后缀(如"output/data.parquet")→ 写单文件 - 路径是目录(如
"output/parquet_data/")→ 自动分片写成多个part-*.parquet文件(需配合engine="pyarrow") - 若指定目录但没权限创建子目录,会报
OSError: [Errno 2] No such file or directory,得先os.makedirs()
单文件模式下,不要手动加 .gz 或 .zip 后缀——Parquet 不识别这些,只会当普通文件名写入,且失去列式压缩优势。
时间列、分类列导出前最好显式处理
Parquet 对 datetime64[ns] 和 category 类型支持良好,但有坑:
- 含 NaT 的时间列,若未设
use_nullable_dtypes=True(Pandas ≥ 2.0),可能被转成object类型,导致 Parquet 写入失败或精度丢失 -
category列默认会被编码为字典页(dictionary page),但如果类别数极多(>10⁵),PyArrow 可能退化为 plain 编码,影响读取性能 - 导出前建议检查:
df.dtypes,对关键列做df["col"] = df["col"].astype("category")或pd.to_datetime()显式转换
一个稳妥写法:
df.to_parquet("data.parquet",
compression="snappy",
use_nullable_dtypes=True)
真正容易被忽略的是:Parquet 的 schema 是写入时固定的,后续追加数据必须严格匹配字段名、类型、nullability——不是“覆盖写”那么简单,别指望靠多次 to_parquet() 拼接数据。

















