파이선 판다스 데이터프레임을 피클로 저장하면, 데이터 타입도 보관되기 때문에 편리합니다. 하지만 피클 버전이 서로 다르면 파일이 열리지 않는 문제가 발생합니다. 오늘은 파이썬 판다스 피클 버전 다를 때 해결 방법에 대해서 알아보겠습니다.

 

 

1. 에러 내용

피클 버전이 다를 때 발생하는 에러는 몇 가지가 있지만, 아래와 같은 메시지가 나왔다면 버전 문제입니다. 피클 파일의 버전과 시스템에서 사용하는 피클 버전이 다르기 때문에, 파일이 열리지 않는 것입니다.

 

AttributeError: Can't get attribute 'new_block' on <module 'pandas.core.internals.blocks' from '/usr/lib/python3.8/site-packages/pandas/core/internals/blocks.py'>

/usr/lib/python3.8/pickle.py in find_class(self, module, name)
   1577         __import__(module, level=0)
   1578         if self.proto >= 4:
-> 1579             return _getattribute(sys.modules[module], name)[0]
   1580         else:
   1581             return getattr(sys.modules[module], name)

 

 

2. 해결 방법

 

파일의 피클 버전을 변경하거나 시스템의 피클 버전을 변경하면, 해결할 수 있습니다. 하지만 결론부터 말하면 위 작업은 불가능했습니다. 해결을 위해 파이썬의 피클 버전부터 확인해 보겠습니다. 파이썬 환경의 피클 버전은 아래 코드를 통해 확인할 수 있습니다. 보통 3,4,5중에 하나일 것입니다.

 

import pickle 
print(pickle.format_version)

 

 

피클 파일 버전은 확인이 어렵습니다. 하지만 경우의 수가 많지 않기 때문에, 아래와 같은 방법을 통해 해결할 수 있습니다. 피클 파일 버전은 총 5가지가 있습니다. 파이썬 버전에 따라 피클 파일 버전도 다릅니다.

 

파이썬 버전 피클 버전
파이썬2 2
3.0~3.7 3
3.8 4
3.8이상 5

 

 

1) 파이썬 환경의 피클 버전 5가 아닐 때

피클 파일의 버전이 5일 가능성이 높습니다. 이 때는 pickle5를 설치하면, 5 버전의 피클 파일을 읽을 수 있습니다. pickle5는 pip install pickle5로 설치해서 사용할 수 있습니다.

 

 

2) 파이썬 환경의 피클 버전이 5일 때 

피클 파일의 버전이 3이나 4일 확률이 높습니다. 이 때는 해당 버전의 파이썬을 설치한 이후에, 피클 파일을 읽고 CSV와 같은 다른 포맷의 파알로 만들어 사용해야 합니다.

 

다른 버전의 파이썬을 설치하는 것이 귀찮다면, 파이썬 개발환경을 제공하는 웹서비스를 이용하면 됩니다. 필자가 확인한 웹서비스별 피클 버전은 아래와 같았습니다.

 

- Python Anywhere: 피클 버전 4
- Google Colab: 피클 버전 5

 


오늘은 이렇게 파이썬 판다스 피클(pickle) 버전 다를 때 해결 방법에 대해서 알아보았습니다. 혼자만 사용하는 파일은 피클로 저장해도 문제가 없습니다. 하지만 다른 사람에게 제공할 거라면 csv등 다른 포맷을 이용하는 것이 좋겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기