看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注: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
或 None
None
None
,则读取所有列。通过设置此参数,可以仅加载感兴趣的列,减少内存使用和提高读取速度。storage_options
dict
或 None
None
use_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
文件系统对象None
filters
list
或 None
None
[['column_name', '==', value]]
以仅加载特定值的行。**kwargs
None
pyarrow
或 fastparquet
)的其他参数,用于进一步控制数据的读取方式。pandas.DataFrame
DataFrame
对象,便于后续的数据分析和处理。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