pandas.DataFrame.to_parquet#
- DataFrame.to_parquet(path=None, *, engine='auto', compression='snappy', index=None, partition_cols=None, storage_options=None, **kwargs)[源代码][源代码]#
将 DataFrame 写入二进制 parquet 格式。
此函数将数据帧写为 parquet 文件。您可以选择不同的 parquet 后端,并可以选择压缩。有关更多详细信息,请参见 用户指南。
- 参数:
- 路径str, 路径对象, 类文件对象, 或 None, 默认 None
字符串、路径对象(实现
os.PathLike[str]
)或实现二进制write()
函数的类文件对象。如果为 None,结果将作为字节返回。如果是字符串或路径,则在写入分区数据集时将用作根目录路径。- 引擎{‘auto’, ‘pyarrow’, ‘fastparquet’},默认 ‘auto’
要使用的 Parquet 库。如果是 ‘auto’,则使用选项
io.parquet.engine
。默认的io.parquet.engine
行为是尝试 ‘pyarrow’,如果 ‘pyarrow’ 不可用,则回退到 ‘fastparquet’。- 压缩str 或 None, 默认 ‘snappy’
要使用的压缩名称。使用
None
表示无压缩。支持的选项:’snappy’, ‘gzip’, ‘brotli’, ‘lz4’, ‘zstd’。- 索引布尔值,默认为 None
如果
True
,在文件输出中包含数据框的索引。如果False
,它们将不会写入文件。如果None
,类似于True
数据框的索引将被保存。然而,不是作为值保存,RangeIndex 将作为范围存储在元数据中,这样不会占用太多空间并且更快。其他索引将作为列包含在文件输出中。- partition_cols列表,可选,默认无
用于对数据集进行分区的列名。列按给定的顺序进行分区。如果路径不是字符串,则必须为 None。
- storage_optionsdict, 可选
对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于HTTP(S) URL,键值对会作为头选项转发到
urllib.request.Request
。对于其他URL(例如以“s3://”和“gcs://”开头),键值对会转发到fsspec.open
。请参阅fsspec
和urllib
获取更多详细信息,关于存储选项的更多示例请参考 这里。- **kwargs
传递给 parquet 库的额外参数。更多详情请参见 pandas io。
- 返回:
- 如果没有提供路径参数,则返回字节,否则返回None
如果没有路径参数,则返回转换为二进制 parquet 格式的 DataFrame 字节。如果提供了路径参数,则返回 None 并将 DataFrame 写入 Parquet 格式中指定的位置。
参见
read_parquet
读取一个 parquet 文件。
DataFrame.to_orc
写一个orc文件。
DataFrame.to_csv
写一个csv文件。
DataFrame.to_sql
写入一个 sql 表。
DataFrame.to_hdf
写入 hdf。
备注
此函数需要 fastparquet 或 pyarrow 库。
当将包含分类列的 DataFrame 保存为 parquet 文件时,由于包含了所有可能的类别,而不仅仅是数据中存在的类别,文件大小可能会增加。这种行为是预期的,并且与 pandas 处理分类数据的方式一致。为了管理文件大小并确保更可预测的往返过程,请在保存 DataFrame 之前考虑使用
Categorical.remove_unused_categories()
。
例子
>>> df = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]}) >>> df.to_parquet("df.parquet.gzip", compression="gzip") >>> pd.read_parquet("df.parquet.gzip") col1 col2 0 1 3 1 2 4
如果你想获取到 parquet 内容的一个缓冲区,你可以使用一个 io.BytesIO 对象,只要你没有使用 partition_cols,因为它会创建多个文件。
>>> import io >>> f = io.BytesIO() >>> df.to_parquet(f) >>> f.seek(0) 0 >>> content = f.read()