작성일자 : 2023-09-24
Ver 0.1.1
Pandasql 소개
Pandasql은 파이썬에서 인기 있는 데이터 조작 라이브러리인 Pandas에 대한 SQL 인터페이스를 제공하는 파이썬 라이브러리다.
이를 통해 SQL에 익숙한 사용자에게는 직관적이고 효율적인 방법으로 데이터를 조작하고 분석할 수 있다.
Pandasql은 SQLite 구문을 기반으로 하며, 데이터베이스 작업 시 익숙한 모든 SQL 문을 사용할 수 있도록 지원한다.
데이터 클리닝 작업이나 복잡한 데이터 분석 작업을 수행하더라도, Pandasql을 사용하면 프로세스를 더 간소화하고 효율적으로 수행할 수 있다.
#pandasql 설치
!pip install pandasql
#pandas 실행
import pandas as pd
#pandasql 실행 방법1
from pandasql import sqldf
#pandasql 실행 방법2
import pandasql as ps
Pandasql은 내부적으로 SQLite를 사용한다. SQLite는 경량화된 디스크 기반 데이터베이스를 제공하는 C 라이브러리다. 이를 통해 개발자는 SQL 구문을 사용하여 데이터베이스와 상호 작용할 수 있다.
Pandasql을 사용하여 SQL 쿼리를 실행하면, Pandas Dataframe이 SQLite 테이블로 변환되고, 이 테이블에서 SQL 쿼리를 실행한 후 결과를 새로운 Dataframe으로 반환한다.
이는 Pandasql을 사용하여 Dataframe을 쿼리할 때 SQLite가 지원하는 모든 SQL 문과 함수를 사용할 수 있음을 의미한다. 데이터를 추출하거나 그룹화하거나 정렬하거나 여러 데이터셋을 조인하는 등의 작업을 모두 Pandasql에서 SQL 쿼리로 수행할 수 있다.
사용방법
pandas의 함수들을 통해 원하는 조건의 Dataframe을 구성할수도 있겠으나, 위 모듈 실행을 통해 Query문을 사용해 원하는 형태의 Dataframe을 생성할 수 있다.
Pandasql 사용 방법은 SQL 쿼리 작성과 같은 간단한 방식이다. Pandasql 모듈에서 제공하는 주요 함수는 sqldf()다. 이 함수는 문자열 형태의 SQL 쿼리와 DataFrame 집합을 매개변수로 받아 쿼리 결과를 새로운 데이터프레임으로 반환한다.
#pandasql을 활용한 dataframe 생성
query = "SELECT * FROM superstore WHERE 범주 = '기술'"
df1 = sqldf(query)
df1.info()
[output]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2381 entries, 0 to 2380
Data columns (total 20 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 행 ID 2381 non-null int64
1 주문 ID 2381 non-null object
2 주문 날짜 2381 non-null object
3 배송 날짜 2381 non-null object
4 배송 형태 2381 non-null object
5 고객 ID 2381 non-null object
6 고객 이름 2381 non-null object
7 세그먼트 2381 non-null object
8 도시 2381 non-null object
9 시/도 2381 non-null object
10 국가/지역 2381 non-null object
11 지역 2381 non-null object
12 제품 ID 2381 non-null object
13 범주 2381 non-null object
14 하위 범주 2381 non-null object
15 제품 이름 2381 non-null object
16 매출 2381 non-null float64
17 수량 2381 non-null int64
18 할인율 2381 non-null float64
19 수익 2381 non-null float64
dtypes: float64(3), int64(2), object(15)
memory usage: 372.2+ KB
df1['범주'].unique()
[output] array(['기술'], dtype=object)
Pandas vs 다른 패키지
Python에서 데이터 조작 및 쿼리 작업을 위해 판다스, sqldf, SQLAlchemy 등 여러 패키지가 있습니다. 그러나 Pandasql은 몇 가지 이유로 돋보입니다.
1. Pandasql은 SQL 구문을 Pandas Dataframe에 바로 사용할 수 있는 기능을 제공한다. 이미 SQL에 익숙하다면 이는 큰 장점이 될 수 있다. 복잡한 쿼리를 다룰 때 코드의 가독성과 디버깅 용이성을 향상시킬 수 있다.
2. Pandasql은 강력하고 기능이 풍부한 SQL 데이터베이스 엔진인 SQLite의 기능을 활용한다. 이는 SQLite가 지원하는 모든 SQL 기능과 함수를 사용할 수 있으므로 데이터 조작 및 분석을 위한 다양한 도구를 제공한다.
3. Pandasql은 설치와 사용이 간편하다. Pandas와 원활하게 통합되므로 이미 Pandas를 사용하고 있다면 자연스러운 선택이 된다.
Pandasql 성능 최적화 기술
Pandasql은 강력한 도구이지만, Python에서 데이터 조작을 위한 항상 가장 빠른 옵션이라는 것은 아니다다.
큰 Dataframe의 경우, 쿼리를 실행할 때마다 Pandasql은 Dataframe을 SQLite 테이블로 변환해야 하기 때문에 시간이 소요될 수 있다. 그러나 Pandasql 쿼리의 성능을 최적화하기 위해 사용할 수 있는 여러 기술이 있다:
- 행의 수 제한: 데이터의 일부에만 관심이 있는 경우 SQL 쿼리에 LIMIT 절을 사용하여 반환되는 행의 수를 줄일 수 있다.
- 인덱스 사용: 특정 열에서 자주 쿼리를 실행하는 경우 해당 열에 인덱스를 생성하여 쿼리 성능을 향상시킬 수 있다.
- 데이터 사전 필터링: 가능하다면 Pandasql에 전달하기 전에 pandas를 사용하여 DataFrame을 필터링하면, SQLite 테이블로 변환해야 하는 데이터 양이 줄어든다.
이러한 기술을 사용하면 대용량 데이터셋과 작업할 때에도 Pandasql을 최대한 활용할 수 있다.