개요
데이터를 핸들링 하다보면 file한개가 사이즈가 큰 경우가 있습니다. 크다는 것은 기준이 다르겠지만 파이썬 pandas dataframe을 쓰려고 할때 파일 크기가 1기가만 되도 노트북 기준으로는 30초씩 걸릴때도 있습니다.
한번 실행 할 때마다 30초씩 걸리면 기다리다 시간이 다 가는 경우가 많습니다.
그래서 파일을 필요한 부분 만큼만 불러오고 싶은데 그냥 파일로 되어 있으면 검색이 잘 안되기 때문에 sqllite3를 사용하는 방법을 생각 해보았습니다.
아래 road_name.json은 931Mb짜리 도로명 주소 전체 데이터(전국) 중에 4개 field만 뽑아놓은 데이터입니다. 그래도 1기가 정도 됩니다. 이 파일을 매번 불러와서 df로 만들어 연산을 하려니 너무 느렸습니다.
Create DB, Table
import sqlite3 as db
import pandas as pd
df = pd.read_json('road_name.json')
con = db.connect('./road_name.db')
df.to_sql('t_road_name', con=con)
이 코드를 이용하면 t_road_name.db라는 파일을 만들고 거기에 t_road_name이라는 table을 만들어서 df에 있는 데이터를 넣어줍니다. create db, create table 이런 ddl을 안써도 데이터가 바로 들어갑니다.
Select
import sqlite3 as db
import pandas as pd
con = db.connect('./road_name.db')
query = 'select * from t_road_name limit 1000'
df = pd.read_sql(query, con = con)
print(df)
위와 같이 쓰면 test.db에 저장된 내용을 hello라는 table에서 select 1000개 하는 쿼리가 실행 됩니다. 여기에 where조건도 줄 수 있습니다.
Where
import sqlite3 as db
import pandas as pd
con = db.connect('./road_name.db')
query = 'select * from t_road_name where 시도 = "{}" limit 1000'.format('서울특별시')
df = pd.read_sql(query, con = con)
print(df)
column명을 한글로 했는데도 에러가 안나고 잘 되는 것을 볼 수 있습니다.
결과
'Language > Python' 카테고리의 다른 글
Python Pandas Merge(Join) 조인 합치기 (0) | 2020.09.21 |
---|---|
Python에서 주소로 Tree만들기 법정동코드, 행정동코드 바꾸는 예제 (0) | 2020.09.19 |
Python에서 sqllite3이용하기(json insert, select) (0) | 2020.09.17 |
Python 행렬 연산 np.dot() (0) | 2020.09.16 |
Python 자연어 처리 with konlpy (0) | 2020.08.31 |
영문 대문자와 숫자를 분리해주는 Python함수 (0) | 2020.07.30 |