二进制格式存取速度快、保留数据类型信息,适合中间存储、缓存数据或大规模数据交换。列式存储(Parquet、ORC、Feather)尤其适合大数据分析与数据湖场景。
1. Pickle
pickle 是 Python 内置的序列化格式。pandas 的
read_pickle/to_pickle是最简单的存取方式,保留 DataFrame/Series 的全部信息(索引、dtype、列名等)。
使用示例
# 写出
df.to_pickle('data.pkl')
# 读取
df = pd.read_pickle('data.pkl')安全性警告
Pickle 文件可执行任意代码。绝对不要加载来自不可信来源的 pickle 文件。
2. Feather
Feather 是 Apache Arrow 定义的跨语言列式存储格式,读写速度极快,适合在 Python 与 R 之间共享数据。
函数签名
pd.read_feather(path, columns=None, use_threads=True, storage_options=None)
DataFrame.to_feather(path, mode='w', compression='lz4', compression_level=None, storage_options=None)| 参数 | 说明 |
|---|---|
columns | 读取列 |
use_threads | 是否使用多线程读取 |
mode | 'w' 或 'a' |
compression | 压缩算法:'lz4'、'zstd'、'uncompressed' |
compression_level | 压缩级别 |
# 写出
df.to_feather('data.feather')
# 读取指定列
df = pd.read_feather('data.feather', columns=['A', 'B'])依赖提示
需要安装 pyarrow:
pip install pyarrow
3. Parquet
Parquet 是 Hadoop/数据湖生态中最流行的列式存储格式,支持复杂嵌套结构、分区、压缩与谓词下推。适合大规模数据分析。
函数签名
pd.read_parquet(
path, engine='auto', columns=None, storage_options=None,
use_nullable_dtypes=False, dtype_backend=_NoDefault.no_default,
filesystem=None, filters=None
)
DataFrame.to_parquet(
path, engine='auto', compression='snappy', index=None,
partition_cols=None, storage_options=None, use_nullable_dtypes=False,
compression_level=None, data_page_size=None, use_deprecated_int96_timestamps=False,
coerce_timestamps=None, allow_truncated_timestamps=False, row_group_size=None
)参数详解
| 参数 | 说明 |
|---|---|
path | 文件路径或目录(分区时) |
engine | 'auto'、'pyarrow' 或 'fastparquet' |
columns | 读取列 |
filters | 谓词下推过滤(如 [('column', '>', 100)]) |
use_nullable_dtypes | 是否使用可空类型(如 Int64、string) |
dtype_backend | 类型后端:'numpy_nullable' 或 'pyarrow' |
compression | 'snappy'、'gzip'、'brotli'、'zstd'、'lz4' 等 |
compression_level | 压缩级别 |
index | 是否写出索引 |
partition_cols | 按这些列分区写出 |
row_group_size | 行组大小 |
data_page_size | 数据页大小 |
使用示例
# 读取
df = pd.read_parquet('data.parquet')
# 按条件过滤读取(谓词下推,减少 IO)
df = pd.read_parquet('data.parquet', filters=[('date', '>=', '2024-01-01')])
# 分区写出
df.to_parquet('output_dir', partition_cols=['year', 'month'])
# 指定压缩
df.to_parquet('data.parquet', compression='zstd')依赖提示
需要安装
pyarrow或fastparquet:pip install pyarrow
4. ORC
ORC(Optimized Row Columnar)是 Hive/Spark 生态常用的列式存储格式,针对大吞吐量读取优化。
pd.read_orc(path, columns=None, dtype_backend=_NoDefault.no_default, filesystem=None, storage_options=None, use_nullable_dtypes=_NoDefault.no_default)
DataFrame.to_orc(path, engine='pyarrow', index=None, engine_kwargs=None, storage_options=None)# 读取
df = pd.read_orc('data.orc')
# 写出
df.to_orc('data.orc')依赖提示
需要安装 pyarrow:
pip install pyarrow
5. HDF5
HDF5 是科学计算领域广泛使用的层级数据格式,适合存储大型数组与分组数据集。
pandas 接口
pd.read_hdf(path_or_buf, key=None, mode='r', errors='strict', where=None, start=None, stop=None, columns=None, iterator=False, chunksize=None)
DataFrame.to_hdf(path_or_buf, key, mode='a', complevel=0, complib=None, append=False, format=None, index=True, min_itemsize=None, nan_rep=None, dropna=None, data_columns=None, errors='strict')参数详解
| 参数 | 说明 |
|---|---|
key | HDF5 中数据的标识符(必填) |
mode | 'r'(读)、'w'(写覆盖)、'a'(追加) |
format | 'fixed'(固定格式,快)或 'table'(可查询、可追加) |
complevel | 压缩级别 0-9 |
complib | 压缩库:'zlib'、'lzo'、'bzip2'、'blosc' |
append | 是否追加 |
data_columns | 作为可查询列的列(format='table' 时) |
# 写入
df.to_hdf('data.h5', key='mydata', format='table')
# 读取指定键
df = pd.read_hdf('data.h5', key='mydata')
# 按条件读取(需要 table 格式)
df = pd.read_hdf('data.h5', key='mydata', where='age > 30')依赖提示
需要安装
tables:pip install tables
HDFStore
HDFStore 提供类似字典的接口,可在同一个 HDF5 文件中管理多个数据集。
# 打开存储
with pd.HDFStore('store.h5') as store:
# 写入多个数据集
store['df1'] = df1
store.put('df2', df2, format='table')
# 读取
df1_back = store['df1']
# 列出所有键
print(store.keys())
# 遍历
for key in store:
data = store[key]
# 条件查询
result = store.select('df2', where='col > 10')
# 删除
store.remove('df1')HDFStore 常用方法
| 方法 | 说明 |
|---|---|
put(key, df) | 写入 |
get(key) | 读取 |
select(key) | 查询(支持 where 条件) |
keys() | 列出所有键 |
remove(key) | 删除 |
append(key, df) | 追加数据 |
info() | 存储信息 |
close() | 关闭文件 |
格式选择建议
| 场景 | 推荐格式 |
|---|---|
| 临时缓存(可信环境) | Pickle |
| 跨语言共享(R/Python) | Feather |
| 大数据分析 / 数据湖 | Parquet |
| 列式存储与 Hadoop 生态 | ORC |
| 科学计算 / 多数据集管理 | HDF5 |
文档 7:4.6 SQL.md