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

保存DataFrame时,pandas pd.to_pickle与pickle.dump有何差异?

pandas.to_pickle 与 pickle.dump 保存DataFrame的差异分析

我想对比使用pandas.DataFrame.to_pickle和标准库pickle.dump保存DataFrame对象的差异,为此做了以下测试:

测试代码

import pandas as pd
import pickle
df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])

# 保存文件
df.to_pickle('df1.pickle')
with open('df2.pickle','wb') as f:
    pickle.dump(df, f)

# 读取文件
df1 = pd.read_pickle('df1.pickle')
with open('df2.pickle','rb') as f:
    df2 = pickle.load(f)

# 验证数据一致性
if (df1 == df2).all().all():
    print('Data is ok.')

# 交叉读取验证
df3 = pd.read_pickle('df2.pickle')
with open('df1.pickle','rb') as f:
    df4 = pickle.load(f)

# 验证交叉读取的数据一致性
if (df3 == df4).all().all():
    print('Data opposite is ok.')

测试结果

Data is ok.
Data opposite is ok.

文件大小差异

测试发现两种方式生成的pickle文件大小存在明显差异:

-rw-rw-r-- 1 spasz spasz 694 lis 15 17:38 df1.pickle
-rw-rw-r-- 1 spasz spasz 662 lis 15 17:38 df2.pickle

测试环境:Python 3.8.0、pandas 1.5.0

核心差异解析

  1. 数据一致性与兼容性
    两种方式保存的文件可以互相读取,且恢复后的DataFrame数据完全一致。这是因为pandas.to_pickle本质基于Python标准库pickle实现,只是做了适配pandas对象的封装。

  2. 文件大小差异原因
    pandas.to_pickle生成的文件更大,是因为它会额外存储pandas特定元数据,比如pandas版本信息、DataFrame的结构细节(索引类型、列数据类型定义、对象内部属性等),这些信息能确保后续读取时精准还原DataFrame的原始结构。而直接用pickle.dump仅序列化整个DataFrame对象,存储信息更紧凑。

  3. 使用场景建议

    • 临时保存DataFrame、追求文件体积紧凑时,可直接用pickle.dump;
    • 长期保存或需要确保DataFrame完整结构(如自定义索引、类别型列、扩展数据类型等)精准还原时,推荐用pandas.to_pickle配合pd.read_pickle,它更适配pandas对象的序列化逻辑。

内容的提问来源于stack exchange,提问作者s.paszko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:45:43