Python/Algorithm

[Python] python에서 pickle file 다루기

언킴 2022. 6. 20. 14:54
반응형

python에서 데이터를 다룰 때 csv, xlsx과 같은 데이터는 많이 다루어 본 적 있을 것이다. 최근에는 yaml이나 pickle file을 많이 다루게 되는데, 왜 csv와 같은 확장자를 사용하지 않고 pickle을 사용하는 것일까?

 

file을 csv나 xlsx 등과 같은 파일로 저장하는 경우 데이터의 고유한 정보를 담지 못한다. 예를 들어, python에서 list를 csv에 저장하게 되는 경우 다시 호출할 때 list 구조로 받아오는 것이 아니라 str으로 변환된 상태로 불러오게 된다. 그렇다면 ast와 같은 함수를 사용해서 str를 다시 list로 변환하는 작업을 수행해야 한다. 

 

pickle은 데이터의 자료 구조를 그대로 저장할 수 있기에 list를 pickle로 저장하면 list구조로 바로 받아올 수 있게 된다. 데이터를 다룰 때 매우 유용한 확장자명이다. 그렇다면 pickle은 어떻게 사용할까? 사용법은 txt 파일과 매우 유사하다. 

 

import pandas as pd 

sample_df = pd.DataFrame(
    {'a' : [[1, 2, 3, 4, 5]], 
    'b' : [[4, 5, 4, 3, 5]]}
)
sample_df.to_csv('sample_df.csv')

#	              a	              b
#0	[1, 2, 3, 4, 5]	[4, 5, 4, 3, 5]

load_df = pd.read_csv('sample_df.csv', index_col = 0 )
type(load_df.loc[0, 'a'])
# str

# save
with open('sample_df.pickle', 'wb') as f:
    pickle.dump(sample_df, f)

# load
with open('sample_df.pickle', 'rb') as f:
    sample_pickle = pickle.load(f)

type(sample_pickle.loc[0, 'a'])
# list

 

to_csv를 통해 csv로 저장한 후 위 데이터를 불러오게 되면 list 구조가 str으로 변환되어서 출력된다. 반면에 pickle을 사용하면 원래의 구조 그대로 list로 출력되는 것을 확인할 수 있다.