高效序列化多个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
相关产品推荐
相关产品推荐

