Parquet 是一种开源的列式存储文件格式,因其高效的压缩和编码技术而在大数据处理中备受青睐。相比传统的 CSV 或 Excel 格式,Parquet 能够显著降低磁盘空间占用,并加速数据的读取和查询。Pandas 从 0.21 版本开始内置支持 Parquet 文件的读写操作,通过 to_parquet()
和 read_parquet()
方法,我们可以方便地将 DataFrame 转换为 Parquet 格式,或者从 Parquet 文件中加载数据进行进一步分析。
本文将详细介绍 Pandas 与 Parquet 数据交互的核心原理、方法和最佳实践,内容包括:
Parquet 是一种列式存储格式,具有以下主要特点:
数学上,可以将一个 Parquet 文件视为一个矩阵:
X = { x i j } i = 1 , … , m j = 1 , … , n X = \{ x_{ij} \}_{i=1,\dots,m}^{j=1,\dots,n} X={xij}i=1,…,mj=1,…,n
其中 ( m ) 为行数,( n ) 为列数。列式存储的优势在于可以对每一列单独进行高效的压缩和查询。
Pandas 提供了 read_parquet()
方法,可以直接从 Parquet 文件中加载数据为 DataFrame。示例如下:
import pandas as pd
# 从 Parquet 文件中读取数据,假设文件路径为 'data/sample.parquet'
df = pd.read_parquet('data/sample.parquet')
print("读取到的 DataFrame 预览:")
print(df.head())
'pyarrow'
(默认)和 'fastparquet'
。选择不同引擎可能会影响性能和兼容性。例如,只读取特定列:
df_partial = pd.read_parquet('data/sample.parquet', columns=['col1', 'col2'])
Pandas 的 to_parquet()
方法可以将 DataFrame 写入 Parquet 文件,支持多种压缩和编码选项:
import pandas as pd
import numpy as np
# 创建示例 DataFrame
df = pd.DataFrame({
'A': np.random.rand(1000),
'B': np.random.randint(0, 100, 1000)
})
# 将 DataFrame 写入 Parquet 文件,指定压缩方式
df.to_parquet('output/data.parquet', engine='pyarrow', compression='snappy')
print("数据成功写入 Parquet 文件。")
'pyarrow'
或 'fastparquet'
。'snappy'
, 'gzip'
, 'brotli'
等。index=False
。Pandas 与 Parquet 的读写依赖于第三方库:
安装方法:
pip install pyarrow
# 或者
pip install fastparquet
pyarrow
性能较好,但在特定场景下,fastparquet
可能表现更优。columns
参数只读取需要的列,降低内存占用和 I/O 时间。假设我们有一个包含股票历史数据的 DataFrame,并需要将其保存为 Parquet 格式以便快速加载和高效存储。
import pandas as pd
import numpy as np
# 模拟股票数据,包含日期、收盘价和成交量
dates = pd.date_range(start="2024-01-01", periods=100, freq="D")
df_stock = pd.DataFrame({
'Date': dates,
'Close': np.random.normal(100, 5, 100),
'Volume': np.random.randint(1000, 5000, 100)
})
df_stock.set_index('Date', inplace=True)
# 写入 Parquet 文件,使用 pyarrow 引擎和 snappy 压缩
df_stock.to_parquet('output/stock_data.parquet', engine='pyarrow', compression='snappy')
print("股票数据已写入 Parquet 文件。")
# 从 Parquet 文件中读取数据
df_loaded = pd.read_parquet('output/stock_data.parquet', engine='pyarrow')
print("读取股票数据预览:")
print(df_loaded.head())
这个案例展示了如何模拟股票数据、设置日期索引、将 DataFrame 写入 Parquet 文件,并再次加载为 DataFrame。通过 Parquet 格式,可以获得更高的读写速度和更低的磁盘占用,适用于大数据量的场景。
本文详细介绍了 Pandas 与 Parquet 数据交互的高级技巧,主要内容包括:
pd.read_parquet()
读取 Parquet 文件,并通过参数选择合适的引擎和读取列。DataFrame.to_parquet()
将数据保存为 Parquet 文件,支持压缩和多种格式选项。pyarrow
与 fastparquet
两种常用引擎,讨论了性能优化策略,如只加载必要列和分块处理。掌握这些技术后,你可以在大规模数据存储、实时数据加载以及数据处理过程中充分利用 Parquet 格式,提升数据分析和模型训练的效率。不断实践与优化,将使你在数据科学项目中获得更高效、更可靠的数据支持。
希望本文能帮助你深入理解并灵活运用 Pandas 与 Parquet 数据交互的技巧,在大数据存储与高效读写中获得显著提升。不断探索和实践,将使你在数据科学与工程项目中获得更高效、更可靠的数据支持。