엥? 폴라스? 그게 뭐예요오?
Polars is an open-source library for data manipulation, known for being one of the fastest data processing solutions on a single machine. It features a well-structured, typed API that is both expressive and easy to use.
뭐라는겨 싶겠지만 폴라스는 판다스 비슷한 일을 한다. 데이터프레임을 만들거나 불러오거나 하는 모든 일들이 가능한데 일단 읽는 속도가 판다스보다 20배 빨랐음. 뭐 메모리 어쩌고 하던데 나는 컴퓨터 아키텍쳐까지는 잘 모르니까 패스하고... 판다스랑 좀 다른 부분이 있다는 건 유념하십쇼.
import polars as pl
일단 판다스처럼 폴라스도 깔고 불러야 쓸 수 있다. 넘파이...는... 불러야되나?
파~일을 열어다~오~
df_csv = pl.read_csv("data/Fluoxetine.csv", separator=";", null_values=["", '""', 'None']) # ChEMBL은 구분자가 세미콜론임다
df_csv2 = pd.read_csv("data/Fluoxetine.csv", sep=";")
여기서 문제가 하나 있음. 저기서 어떤게 폴라스고 어떤게 판다스게요? 위에껍니다. 세부적인 옵션 빼고 걍 불러오는건 폴라스나 판다스나 비슷해서 pl pd로 구별해야되는데 이게 하다보면 그게 잘 안됩니다. 둘 중 하나만 쓰거나 둘 다 써야되는 상황이면 변수명으로 구별하던가 주석을 다십시오.
separator=";"는 csv 구분자 옵션인 거 알겠는데 저 뒤에놈은 뭔가요? 저게 켐블 불러온건데, 구분자가 ;이고 없는건 걍 없거든요? 그러면 판다스는 아 없군 결측값! 하는데 폴라스는 ""로 때워버립니다. 이게 그리고 NaN이랑 null이랑 달라요 폴라스는. 폴라스에서는 결측값이 널인데 이건 SQL의 널 비슷하게 흘러갑니다. ""는 어쨌든 뭐가 있는거니까 결측값이 아니래요. 그래서 부를때 자 이게 결측값이야~ 도 같이 해 준 거다.
참고로 같은 파일 불러오는데 폴라스는 2밀리초, 판다스는 21밀리초 걸림.
내 하드에 저-장
쓰는것도 코드 자체는 차이가 없다. to_csv 하면 되는'데' 저장한 결과물에서 차이가 난다. 판다스 써보신 분들 to_csv로 저장한거 다시 열었더니 맨 왼쪽 칼럼에 Unnamed:0 생긴 적 있으시죠? 그런거 한 두세번 돌리면 언네임드만 주루룩 생기고 그래서 열고 드롭한 적 있으시죠? 판다스에서 csv로 저장할때는 index=False를 줘야 그게 안 생긴다.
그럼 폴라스는요? 폴라스는 그 옵션 안 줘도 인덱스가 따로 저장이 안 된다. 대신 저장하는데 드는 소요시간은 비슷했음.
결측값
위에도 썼지만 결측값이 폴라스는 널이다. 그래서 .isna() 비슷한 함수가 .is_null()이고 .isna().sum() 비슷한건 .null_count()인데... 이거 가로로 나옵니다... 그리고 폴라스는 표 출력하면 위에 shape가 같이 나옴.
쿼리 되나요?
# 1. 컬럼명 변경 (성공적)
df_csv = df_csv.rename({"ChEMBL ID": "ChEMBL_ID"})
# 2. 컨텍스트 및 테이블 등록
ctx = pl.SQLContext()
ctx.register("chembl_table", df_csv)
# 3. 쿼리 실행 (쌍따옴표 제거!)
result = ctx.execute("""
SELECT * FROM chembl_table
WHERE ChEMBL_ID = 'CHEMBL153036'
""").collect()
result
폴라스에서는 당신이 SQL 쌉고인물이라면 파이썬으로 불러와놓고 SQL 쿼리를 쓸 수 있다. 실화임. SELECT * FROM chembl_table WHERE ChEMBL_ID = 'CHEMBL153036' <<이게 SQL 쿼리예요.
df_csv.filter(pl.col("ChEMBL ID") == "CHEMBL153036")
아니 그럼 SQL 알못들은 어쩌라고요! 아 필터 쓰십쇼.
데이터의 정보를 확인하는 방법
요즘 EDA할때 생략하는 그거 맞다. 폴라스... 하게되면 이거는 정보 확인하는거 한번 올려드림. 판다스랑 기능은 똑같은데 토해내는게 달라요.
df_csv.schema
.info() 비슷한 기능을 하는게 .schema인데 인포처럼 칼럼 몇갠데 몇개 비었고 이런건 안나오고 뭔 타입인지만 나온다. 인포 비슷한거 필요하시면 .glimpse() 쓰십쇼. 아니면 널카운트?
아니면 .describe()에서 칼럼별 통계값 보고 알 수 있다. 예? 뭔 소리임? 폴라스에서는 널이 결측값이라고 했잖아요? 근데 SQL에서 연산에 널끼면 다 널됩니다. 왜냐고요? 널이 응 아니 몰라에서 몰라거든. 설문조사로 치자면 예 아니오 무응답에서 무응답이다. 슈뢰딩거의 고양이는 박스 까보면 얘가 갔는지 있는지는 알 수 있지만 널은 박스 밀봉된 슈뢰딩거의 고양이라 진짜 모름.
이 글에서는 그냥 데이터 열고 정보 확인하는것만 비교해봤는데, 다음편에서는 시각화 어떻게 되나 해 볼 예정이다. matplotlib나 seaborn에서는 폴라스를 못 쓴다는 얘기가 있음.
'Coding > Python' 카테고리의 다른 글
| 플랫폼/데이터 엔지니어링 과제 풀이 (Prologue-문제 그리고 구상) (0) | 2026.05.09 |
|---|---|
| Polars 데이터프레임도 시각화가 되나요? (0) | 2026.04.10 |
| MSA에 군집분석을 끼얹어보세요! (0) | 2026.02.20 |
| M1V1 = M2V2 (0) | 2026.02.15 |
| 코로나바이러스 MSA (0) | 2026.02.05 |
