티스토리 뷰
개요
데이터를 핸들링 하다보면 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명을 한글로 했는데도 에러가 안나고 잘 되는 것을 볼 수 있습니다.
결과
728x90
'Language > Python' 카테고리의 다른 글
Python Pandas Merge(Join) 조인 합치기 (0) | 2020.09.21 |
---|---|
Python에서 주소로 Tree만들기 법정동코드, 행정동코드 바꾸는 예제 (0) | 2020.09.19 |
Python 행렬 연산 np.dot() (0) | 2020.09.16 |
Python 자연어 처리 with konlpy (1) | 2020.08.31 |
영문 대문자와 숫자를 분리해주는 Python함수 (0) | 2020.07.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 도커각티슈박스
- Linux
- 이직
- docker container whale
- docker container case
- 개발자
- docker container tissue box
- docker container tissue
- Sh
- 도커컨테이너
- shellscript
- 도커티슈박스
- docker container
- vim
- 2017 티스토리 결산
- 도커티슈케이스
- 도커각티슈케이스
- 싱가폴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함