Reading pickle 在 Python 3.6 中比在 Python 2.7 中表现更差

Reading pickle performs worse in Python 3.6 than in Python 2.7

我注意到我的代码的 pickle 读取部分在 Python 3.6 中比在 Python 2.7 中执行得慢。这不是一个真正的问题,但我很好奇是什么导致了 it/if 对于这种差异有任何解释。 我在两个版本中都使用了以下脚本来说明差异。在这里,一个泡菜被导入,然后保存为一个包含 14804726 行和 10 列的数据框:

import pandas as pd
import time

timestart=time.time()
picklefile=r'C:\Users\Me\rawdata.pkl'  
rawdata = pd.read_pickle(picklefile)

print(time.time()-timestart)

给出了以下时间输出:

>>>Output 2.7.14: 14.9129998684
>>>Output 3.6.4: 60.39831018447876

当你在 Python 3 中读取 Python 2 pickle 时,它​​必须对字符串进行转换

在Python2中,字符串被表示为简单的字节流;在 Python 3 中使用了 unicode 表示法,它能够表示范围更广的字符。当您在 Python 3 中加载 Python 2 pickle 时,它​​必须将一种格式转换为另一种格式。

这很可能会降低您的加载速度。

另请注意,默认执行的转换可能不适合您的使用,您可能希望向负载添加其他参数以确保应用正确的编码。