看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.read_parquet() 是 pandas 库中用于读取 Parquet 文件并将其转换为 DataFrame 对象的方法。Parquet 是一种列式存储的文件格式,广泛应用于大数据处理和分析中,具有高效的压缩和编码能力。通过 read_parquet() 方法,用户可以方便地从本地文件系统或远程存储中加载 Parquet 格式的数据,便于后续的数据分析与处理。
pandas.read_parquet(
path,
engine='auto',
columns=None,
storage_options=None,
use_nullable_dtypes=<no_default>,
dtype_backend=<no_default>,
filesystem=None,
filters=None,
**kwargs
)
path
str、pathlib.Path、pyarrow.fs.FileSystem 对象等engine
{'auto', 'pyarrow', 'fastparquet'}'auto''auto': 自动选择可用的引擎(优先选择 pyarrow,如果不可用则选择 fastparquet)。'pyarrow': 使用 pyarrow 引擎读取。'fastparquet': 使用 fastparquet 引擎读取。columns
list-like 或 NoneNoneNone,则读取所有列。通过设置此参数,可以仅加载感兴趣的列,减少内存使用和提高读取速度。storage_options
dict 或 NoneNoneuse_nullable_dtypes
bool 或 None<no_default>True,则使用 Pandas 的可空数据类型(如 Int64、string 等)来读取数据。此参数在处理缺失值时尤为有用。dtype_backend
{'numpy_nullable', 'pyarrow', None}<no_default>'numpy_nullable': 使用 NumPy 的可空数据类型。'pyarrow': 使用 pyarrow 的数据类型。None: 使用默认的数据类型后端。filesystem
pyarrow.fs.FileSystem 对象或 fsspec 文件系统对象Nonefilters
list 或 NoneNone[['column_name', '==', value]] 以仅加载特定值的行。**kwargs
Nonepyarrow 或 fastparquet)的其他参数,用于进一步控制数据的读取方式。pandas.DataFrameDataFrame 对象,便于后续的数据分析和处理。pandas.read_parquet() 主要用于以下场景:
假设有一个名为 data.parquet 的本地 Parquet 文件,内容如下:
姓名 年龄 城市
艾丽丝 30 纽约
鲍勃 25 洛杉矶
查理 35 芝加哥
读取该 Parquet 文件并打印 DataFrame:
import pandas as pd
# 读取本地 Parquet 文件
df = pd.read_parquet('data.parquet')
print(df)
输出
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
假设 Parquet 文件存储在 Amazon S3 上,路径为 s3://my-bucket/data.parquet。
import pandas as pd
import s3fs
# 创建 S3 文件系统对象
s3 = s3fs.S3FileSystem(anon=False)
# 读取 S3 上的 Parquet 文件
df = pd.read_parquet('s3://my-bucket/data.parquet', storage_options={'client_kwargs': {'endpoint_url': 'https://s3.amazonaws.com'}})
print(df)
输出
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
假设 Parquet 文件中包含更多列,但我们只关心 姓名 和 城市 列。
import pandas as pd
# 读取 Parquet 文件,指定只加载 '姓名' 和 '城市' 列
df = pd.read_parquet('data.parquet', columns=['姓名', '城市'])
print(df)
输出
姓名 城市
0 艾丽丝 纽约
1 鲍勃 洛杉矶
2 查理 芝加哥
假设我们只想读取年龄大于30的记录。
import pandas as pd
# 设置过滤条件:年龄 > 30
filters = [['年龄', '>', 30]]
# 读取 Parquet 文件,应用过滤条件
df = pd.read_parquet('data.parquet', filters=filters)
print(df)
输出
姓名 年龄 城市
2 查理 35 芝加哥
使用 dtype_backend 参数指定数据类型后端为 pyarrow。
import pandas as pd
# 读取 Parquet 文件,指定 dtype_backend 为 'pyarrow'
df = pd.read_parquet('data.parquet', dtype_backend='pyarrow')
print(df)
print(df.dtypes)
输出
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
姓名 string
年龄 int64
城市 string
dtype: object
读取 Parquet 文件时,使用 Pandas 的可空数据类型。
import pandas as pd
# 读取 Parquet 文件,使用可空数据类型
df = pd.read_parquet('data.parquet', use_nullable_dtypes=True)
print(df)
print(df.dtypes)
输出
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
姓名 string
年龄 Int64
城市 string
dtype: object
对于非常大的 Parquet 文件,可以使用 chunksize 参数分块读取。
import pandas as pd
# 逐块读取 Parquet 文件,每块包含1000行
chunk_iter = pd.read_parquet('large_data.parquet', chunksize=1000)
for chunk in chunk_iter:
print(chunk.head())
# 在这里可以对每个块进行处理
输出
姓名 年龄 城市
0 艾丽丝 30 纽约
1 鲍勃 25 洛杉矶
2 查理 35 芝加哥
...
pandas.read_parquet() 是一个高效、灵活的函数,用于从 Parquet 文件中读取数据并将其转换为 Pandas 的 DataFrame 对象。通过灵活配置参数,如选择引擎、指定列、应用过滤条件、选择数据类型后端等,可以满足不同的数据读取需求。无论是处理本地存储的 Parquet 文件,还是从远程存储系统中加载数据,read_parquet() 都能提供高性能的数据读取能力,极大地提升数据分析和处理的效率。
更新时间:2024-10-10 09:26:53 标签:pandas python parquet