You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

高效序列化多个Pandas DataFrame的技术问询

嘿,针对你要高效序列化多个Pandas DataFrame的需求,我整理了几个实用方案,都是日常开发中常用的,你可以根据自己的场景来选:

1. Python原生Pickle:简单直接,零额外依赖

Pickle是Python自带的序列化工具,不需要额外安装库,对Pandas DataFrame的支持很完善,适合快速保存和加载。

你可以把多个DataFrame打包进一个字典,然后一次性序列化:

import pandas as pd
import pickle

# 你的原始数据初始化
sales1 = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140}, 
          {'account': 'Alpha Co', 'Jan': 200, 'Feb': 210, 'Mar': 215}, 
          {'account': 'Blue Inc', 'Jan': 50, 'Feb': 90, 'Mar': 95 }]
df1 = pd.DataFrame(sales1)

sales2 = [{'account': 'Jones LLC', 'Apr': 150, 'May': 200, 'Jun': 140}, 
          {'account': 'Alpha Co', 'Apr': 200, 'May': 210, 'Jun': 215}, 
          {'account': 'Blue Inc', 'Apr': 50, 'May': 90, 'Jun': 95 }]
df2 = pd.DataFrame(sales2)

# 把多个DataFrame存入字典
data_dict = {'sales_q1': df1, 'sales_q2': df2}

# 序列化保存到文件
with open('sales_data.pkl', 'wb') as f:
    pickle.dump(data_dict, f)

# 读取序列化文件
with open('sales_data.pkl', 'rb') as f:
    loaded_data = pickle.load(f)

# 取出对应的DataFrame
loaded_df1 = loaded_data['sales_q1']
loaded_df2 = loaded_data['sales_q2']

优缺点:

  • 优点:操作简单、零额外依赖,能完整保留DataFrame的所有结构和数据类型
  • 缺点:仅支持Python环境读取,文件体积相对较大,且不要加载来源不明的Pickle文件(存在安全风险)

2. Feather:高效轻量,跨语言友好

Feather是专门为表格数据设计的序列化格式,读写速度极快,文件体积小,还支持Python、R、Julia等多语言读取,适合需要跨语言协作的场景。

使用前需要安装依赖:pip install pyarrow

import pandas as pd
from pyarrow import feather

# 分别保存每个DataFrame
feather.write_feather(df1, 'sales_q1.feather')
feather.write_feather(df2, 'sales_q2.feather')

# 读取文件
loaded_df1 = feather.read_feather('sales_q1.feather')
loaded_df2 = feather.read_feather('sales_q2.feather')

优缺点:

  • 优点:读写速度碾压Pickle,文件小巧,跨语言兼容性强
  • 缺点:单文件仅支持存储一个DataFrame(可以通过多文件或结合其他容器解决),需要额外安装pyarrow库

3. Parquet:高压缩比,大数据场景首选

Parquet是列式存储格式,压缩效率极高,适合处理大规模数据集,同样支持多语言,是大数据分析场景的主流选择。

使用前安装依赖:pip install pyarrow(或fastparquet)

import pandas as pd

# 保存DataFrame到Parquet文件
df1.to_parquet('sales_q1.parquet')
df2.to_parquet('sales_q2.parquet')

# 读取文件
loaded_df1 = pd.read_parquet('sales_q1.parquet')
loaded_df2 = pd.read_parquet('sales_q2.parquet')

优缺点:

  • 优点:压缩比最高,节省存储空间,列式存储适合大数据的切片查询,跨语言支持好
  • 缺点:小数据集场景下读写速度不如Feather,需要额外依赖库

4. HDF5:单文件存储多个数据集,适合复杂结构

HDF5支持在单个文件中存储多个数据集,还支持分层结构和部分加载,适合需要把多个DataFrame整合到一个文件的场景。

import pandas as pd

# 写入HDF5文件
with pd.HDFStore('sales_data.h5') as store:
    store['sales_q1'] = df1
    store['sales_q2'] = df2

# 读取HDF5文件
with pd.HDFStore('sales_data.h5') as store:
    loaded_df1 = store['sales_q1']
    loaded_df2 = store['sales_q2']

优缺点:

  • 优点:单文件管理多个DataFrame,支持部分加载(比如只读取某几列),适合大型复杂数据
  • 缺点:HDF5库相对厚重,小数据场景下没必要,跨语言支持不如Feather/Parquet

总结选择建议

  • 纯Python环境、快速实现:选Pickle
  • 跨语言协作、追求速度:选Feather
  • 大数据、高压缩需求:选Parquet
  • 单文件管理多数据集:选HDF5

内容的提问来源于stack exchange,提问作者Uruguayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:44:19