Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

791
Vistas
pickle.load falla en (protocolo = 4) objetos de python 3.7 cuando se usa python 3.8+ (con protocolo predeterminado = 5)

Python cambió su protocolo pickle a 4 en python 3.4 a 3.7 y nuevamente lo cambió a protocol=5 en python 3.8. ¿Cómo abro archivos en escabeche más antiguos en python 3.8?

Lo intenté:

 >>> with open('data_frame_111.pkl','rb') as pfile: ... x1 = pickle.load(pfile) ... Traceback (most recent call last): File "<stdin>", line 2, in <module> AttributeError: Can't get attribute 'new_block' on <module 'pandas.core.internals.blocks' from '/opt/anaconda3/lib/python3.8/site- packages/pandas/core/internals/blocks.py'>

y

 >>> with open('data_frame_111.pkl','rb') as pfile: ... x1 = unpkl.load(pfile, protocol=4)

pero mientras que el protocolo es una palabra clave en pickle.dump , no es parte de pickle.load . Crear una instancia pickle.Unpickler() tampoco funciona. Pero obviamente debería haber una manera.

En python 3.7, import pickle5 y lo usaría para abrir pickle más nuevos, pero no puedo encontrar documentación sobre cómo hacer lo contrario en python 3.8.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

with open('data_frame_111.pkl','rb') as pfile: x1 = pickle.load(pfile)

Intenta cambiar a:

 import pandas as pd with open('data_frame_111.pkl','rb') as pfile: x1 = pd.read_pickle(pfile)

Parece que ha habido algunos cambios debido a problemas de vulnerabilidad de seguridad.

over 4 years ago · Santiago Trujillo Denunciar

0

Debe actualizar a la última versión (1.3.1 funcionó para mí) de pandas. O, para ser más precisos, la versión de pandas cuando hiciste pickle.dump(some_path) debería ser la misma versión de pandas que cuando hiciste pickle.load(some_path) .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda