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。请参阅 fsspecurllib 获取更多详细信息,关于存储选项的更多示例请参考 这里

**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。

备注

  • 此函数需要 fastparquetpyarrow 库。

  • 当将包含分类列的 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()