Pickle 이슈 정리

노하람·2022년 2월 4일
0

파이썬엔 모든 오브젝트를 그대로 저장할 수 있는 아주 편리한 pickle이라는 확장자를 이용할 수 있는 기능이 있다.

이 pickle을 저장하는건 아주 간단한데, 다음에 정리하도록 하고
데이터 프레임의 경우 df.to_pickle('<경로명>.pkl')df.read_pickle('<경로명>.pkl')로 쉽게 일고 쓸 수 있다.

이렇게 데이터 프레임을 저장하고 읽어오던 도중 에러가 발생하였는데 살펴보도록 하자.

AttributeError

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

  1. 에러는 df_me = pd.read_pickle(df_me)에서 발생했다.
    • 이유는 pickle 파일을 저장한 환경(pandas 버전)과 pickle을 읽는 환경(pandas 버전)이 상이해서다.
    • 이러한 이유 때문에도 도커와 같은 컨테이너를 적극 권장한다.
    • 나는 anaconda를 애용하기 때문에 다른 가상환경에서 pickle파일을 저장한 것이 기억났다.

이슈 해결

  1. 동일한 환경(pandas 버전)을 설치한다.
    혹은
  2. 컨테이너를 이용한다.
    혹은
  3. pickle 파일을 생성했던 가상환경에서 pickle파일을 읽는다.
    • 이 경우 다른 종속성(타 패키지 설치 등)이 안맞는 경우가 많을 것이다.
    • 그렇다고 두 환경을 똑같이 만들어주기는 불편하니까 pickle을 저장한 환경의 pandas 버전만 확인해서, 사용하고자 하는 가상환경의 pandas 버전을 변경해주자!
    • pip list | grep pandas
    • pickle을 저장한 환경의 pandas는 1.3.5버전이고, 내가 현재 사용하는 환경은 1.2.4버전이다.
    • pip install pandas==1.3.5

해결 완료🥳

profile
MLOps, MLE 직무로 일하고 있습니다😍

1개의 댓글

comment-user-thumbnail
2022년 10월 5일

안녕하세요 cmd에서 pip list | grep pandas를 기입하면 'grep'은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다라는 오류가 뜨는데 어떻게 pickle을 사용한 환경에서 pandas version을 확인해서 다른 환경에서 pickle을 사용할 수 있을까요? ㅠㅠ

답글 달기