대용량 데이터 프레임을 다루기 위한 시간 단축하기
대용량의 df를 여러 번 읽어야 할 경우, 단순 loc 등으로 검색하는 것이 아닌 이를 db로 구현하여 index를 이용한 select가 훨씬 빠르다.
이 때 db로 사용할 sqlite에 대한 내용은 아래 포스트를 참고하길 바란다.
<<<<<<<<<<<추가할 예정>>>>>>>>>>>>
db를 생성할 땐 두가지 방법이 있다.
db connect 할 때 쓰이는 코드인데 연결하고자 하는 db가 없을 경우 새로 생성해준다.
from sqlalchmey import create_engine
import sqlite3
example = create_engine('sqlite:///db파일명.db')
example = sqlite3.connect('db파일명.db')
csv의 용량이 너무 크면 memory error가 뜨기 때문에 chunk size 만큼 to sql 하도록 설계했다.
reader = pd.read_csv(path, sep=',', chunksize=1000000, iterator=True, low_memory=False)
for chunk in reader:
chunk.to_sql('table명', example, if_exists='append')
이 때, table명과 db파일명은 달라도 상관없으니 헷갈리지 않도록 유의하자.
이렇게 하면 sqlite 쿼리로 데이터를 select, update, delete 등을 할 수 있다. 실제 sql보다는 가능한 쿼리가 적지만 데이터를 추출하고 간단한 전처리 하기에는 훨씬 빠르므로 pandas와 적절히 섞어서 응용하면 좋을 거 같다.
이제 이렇게 만든 db로 데이터 추출하고 더 빠른 추출을 위한 인덱싱은 다음 포스팅에서 다뤄보도록 하자.
반응형