pandas.read_parquet#
- pandas.read_parquet(path, engine='auto', columns=None, storage_options=None, use_nullable_dtypes=_NoDefault.no_default, dtype_backend=_NoDefault.no_default, filesystem=None, filters=None, **kwargs)[源代码]#
从文件路径加载 parquet 对象,返回一个 DataFrame。
- Parameters:
- pathstr、path 对象或文件类对象
字符串、路径对象(实现
os.PathLike[str])或实现了二进制read()函数的文件类对象。字符串可以是 URL。有效的 URL 方案包括 http、ftp、s3、gs 和 file。对于 file URL,需要主机名。本地文件可以是:file://localhost/path/to/table.parquet。文件 URL 也可以是指向包含多个分区 parquet 文件的目录的路径。pyarrow 和 fastparquet 都支持目录路径和文件 URL。目录路径可以是:file://localhost/path/to/tables或s3://bucket/partition_dir。- engine{‘auto’, ‘pyarrow’, ‘fastparquet’},默认值为 ‘auto’
要使用的 Parquet 库。如果为 ‘auto’,则使用选项
io.parquet.engine。默认的io.parquet.engine行为是尝试 ‘pyarrow’,如果 ‘pyarrow’ 不可用则回退到 ‘fastparquet’。当使用
'pyarrow'引擎且未提供存储选项,并且pyarrow.fs和fsspec都实现了文件系统(例如 “s3://”)时,将首先尝试pyarrow.fs文件系统。如果要使用 fsspec 的实现,请使用带有已实例化 fsspec 文件系统的 filesystem 关键字。- columnslist, default=None
如果不是 None,则只从文件中读取这些列。
- storage_optionsdict, 可选
适用于特定存储连接的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将作为标头选项转发给
urllib.request.Request。对于其他 URL(例如,以 “s3://”, 和 “gcs://” 开头的 URL),键值对将转发给fsspec.open。更多详情请参阅fsspec和urllib,有关存储选项的更多示例,请参阅 here 。在 1.3.0 版本加入.
- use_nullable_dtypesbool,默认 False
如果为 True,则使用将
pd.NA作为缺失值指示符的 dtype 来创建 DataFrame。(仅适用于pyarrow引擎)随着将来添加支持pd.NA的新 dtype,此选项的输出将更改为使用这些 dtype。注意:这是一个实验性选项,行为(例如,支持的额外 dtype)可能会在未经通知的情况下更改。自 2.0 版本弃用.
- dtype_backend{‘numpy_nullable’, ‘pyarrow’}, 默认 ‘numpy_nullable’
应用于结果
DataFrame的后端数据类型(仍处于实验阶段)。行为如下:"numpy_nullable":返回支持可空 dtype 的DataFrame(默认)。"pyarrow":返回 pyarrow 支持的可空ArrowDtypeDataFrame。
在 2.0 版本加入.
- filesystemfsspec 或 pyarrow 文件系统,默认为 None
读取 parquet 文件时使用的文件系统对象。仅对
engine="pyarrow"实现。在 2.1.0 版本加入.
- filtersList[Tuple] 或 List[List[Tuple]], default None
用于过滤数据。过滤语法:[[(column, op, val), …],…] 其中 op 是 [==, =, >, >=, <, <=, !=, in, not in]。最里面的元组被转置为一组通过 AND 操作应用的过滤器。最外层的列表通过 OR 操作将这些过滤器组合起来。也可以使用单个元组列表,这意味着不会在过滤器组之间进行 OR 操作。
使用此参数不会导致对最终分区进行逐行过滤,除非同时指定了
engine="pyarrow"。对于其他引擎,过滤仅在分区级别执行,即防止加载某些行组和/或文件。在 2.1.0 版本加入.
- **kwargs
任何额外的 kwargs 都会传递给引擎。
- Returns:
- DataFrame
参见
DataFrame.to_parquet创建一个序列化 DataFrame 的 parquet 对象。
Examples
>>> original_df = pd.DataFrame( ... {"foo": range(5), "bar": range(5, 10)} ... ) >>> original_df foo bar 0 0 5 1 1 6 2 2 7 3 3 8 4 4 9 >>> df_parquet_bytes = original_df.to_parquet() >>> from io import BytesIO >>> restored_df = pd.read_parquet(BytesIO(df_parquet_bytes)) >>> restored_df foo bar 0 0 5 1 1 6 2 2 7 3 3 8 4 4 9 >>> restored_df.equals(original_df) True >>> restored_bar = pd.read_parquet(BytesIO(df_parquet_bytes), columns=["bar"]) >>> restored_bar bar 0 5 1 6 2 7 3 8 4 9 >>> restored_bar.equals(original_df[['bar']]) True
该函数使用直接传递给引擎的 kwargs。在以下示例中,我们使用 pyarrow 引擎的 filters 参数来过滤 DataFrame 的行。
由于 pyarrow 是默认引擎,我们可以省略 engine 参数。请注意,filters 参数由 pyarrow 引擎实现,该引擎可以受益于多线程,并且在内存方面也可能更经济。
>>> sel = [("foo", ">", 2)] >>> restored_part = pd.read_parquet(BytesIO(df_parquet_bytes), filters=sel) >>> restored_part foo bar 0 3 8 1 4 9