Skip to content

Polars로 CSV 파일 읽는 방법 설명

Updated on

Polars는 Python에서 빠른 DataFrame 라이브러리로, 구조화된 데이터 처리를 위한 친숙하고 강력한 인터페이스를 제공합니다. 특히 CSV 파일을 다룰 때, Polars는 pandas의 read_csv()scan_csv()와 유사한 간편한 메서드를 제공하여 빛을 발합니다. 이러한 메서드를 최대한 활용하는 방법을 알아봅시다.

read_csv()로 CSV 파일 가져오기

Polars는 CSV 파일을 가져오기 위한 사용하기 쉬운 read_csv() 메서드를 제공합니다. 그 문법은 pandas와 상당히 유사하여, pandas에 익숙한 사람들에게는 쉬운 전환을 도와줍니다. 다음은 빠른 데모입니다:

import polars as pl
 
# read_csv로 CSV 파일 가져오기
df = pl.read_csv('data_sample.csv')
print(df)

출력:

shape: (3, 4)
┌───────────┬───────┬─────┬───────────────────┐
│ studentId ┆ Name  ┆ Age ┆ FirstEnrollment   │
│ ---       ┆ ---   ┆ --- ┆ ---               │
│ i64       ┆ str   ┆ i64 ┆ str               │
╞═══════════╪═══════╪═════╪═══════════════════╡
│ 1         ┆ Mike  ┆ 24  ┆ 2020-01-17        │
│ 2         ┆ Sarah ┆ 33  ┆ 2021-07-23        │
│ 3         ┆ John  ┆ 19  ┆ 2022-12-20        │
└───────────┴───────┴─────┴───────────────────┘

read_csv()를 사용하여 날짜 파싱하기

CSV 파일을 가져오는 동안 특정 열을 날짜-시간 객체로 파싱하고 싶은 경우가 있을 수 있습니다. 이 기능은 parse_dates=True 매개변수로 가능합니다. 예를 들면:

# 날짜 파싱을 포함한 CSV 파일 읽기
df_dates = pl.read_csv('data_sample.csv', parse_dates=True)
print(df_dates)

On-the-fly로 열의 데이터 유형 변경하기

파일을 읽는 동안 특정 열의 데이터 유형을 변경할 수도 있습니다. 예를 들어, 'Age' 열을 i64에서 Int32로 변환하는 방법은 다음과 같습니다:

# 특정 데이터 유형을 지정하여 CSV 파일 읽기
df_age_casted = pl.read_csv('data_sample.csv', parse_dates=True).with_column(pl.col('Age').cast(pl.Int32))
print(df_age_casted)

Polars는 DataFrame을 표시할 때 열 유형을 표시하여 데이터 유형 문제 해결을 용이하게 합니다.

scan_csv()로 읽기 최적화하기

대용량 데이터셋의 경우, Polars는 리소스를 더 효율적으로 사용할 수 있는 scan_csv() 메서드를 제공합니다. 지연 평가(lazy evaluation)를 활용하여 이 메서드는 데이터를 메모리에 필요할 때만 로드하며(즉, collect()가 호출될 때), 메모리 오버헤드를 줄일 수 있습니다. 간단한 예시를 살펴보겠습니다:

# scan_csv로 효율적으로 읽기
q = pl.scan_csv('data_sample.csv')
df_lazy = q.collect()
print(df_lazy)

연산을 실행하려면 collect()를 호출해야 하며, 그렇지 않으면 연산의 표현(계획)이 반환됩니다.

이것은 Polars가 CSV 파일과 상호작용하는 방법 중 일부입니다. 명확한 구문과 강력한 함수를 통해 Python에서 데이터 조작에 탁월한 도구로 사용할 수 있습니다.

Polars 표현식과 동작 이해하기

Polars는 즉시 실행과 지연 실행 두 가지 모드를 지원합니다. 즉시 실행 모드에서는 계산이 즉시 실행되지만, 지연 실행 모드에서는 연산이 대기열에 저장되고 필요할 때만 평가되어 효율성과 메모리 사용을 최적화합니다.

scan_csv()와 지연 평가 활용하기

scan_csv()를 사용할 때 데이터가 즉시 메모리로 로드되지 않습니다. 대신 Polars는 수행할 연산을 포함하는 쿼리 계획을 구성합니다. 이 쿼리 계획은 collect()가 호출될 때에만 실행됩니다. 이렇게 지연 평가라는 기법을 사용하면, 특히 대용량 데이터셋에서는 메모리 사용량을 더욱 효율적으로 줄이고 빠른 연산을 할 수 있습니다. 다음은 예시입니다:

# scan_csv를 사용한 지연 읽기
query = pl.scan_csv('data_sample.csv')
print(query)

위의 코드를 실행하면 연산의 "계획" 요약이 출력되지만, 연산 자체는 아직 실행되지 않습니다.

naive plan: (run LazyFrame.describe_optimized_plan() to see the optimized plan)

  CSV SCAN data_sample.csv
  PROJECT */4 COLUMNS

이 계획을 실행하고 데이터를 메모리로 로드하려면 collect() 메서드를 사용해야 합니다:

df_lazy = query.collect()
print(df_lazy)

CSV 파일 읽기 이상의 기능: 데이터 조작

CSV 파일 읽기 이외에도, Polars는 pandas 작업과 잘 맞는 포괄적인 데이터 조작 함수를 제공합니다. 이를 통해 Polars는 데이터 분석에 효율적이고 다양한 도구로 사용될 수 있습니다. 데이터 필터링, 변형 적용, 정보 집계 등을 수행하면서 Polars는 우수한 성능으로 모든 작업을 처리할 수 있습니다.

PyGWalker를 사용하여 Polars DataFrame 시각화

PyGWalker (opens in a new tab)는 Polars DataFrame으로부터 데이터 시각화를 쉽게 생성할 수 있는 오픈 소스 Python 라이브러리입니다.

데이터 시각화를 위한 PyGWalker (opens in a new tab)

이제 Python 코드로 복잡한 처리를 완료할 필요가 없습니다. 데이터를 가져와 변수를 끌어다 놓기만 하면 다양한 종류의 데이터 시각화를 생성할 수 있습니다! 다음은 PyGWalker 작업에 대한 간단한 데모 비디오입니다:


Jupyter Notebook에서 PyGWalker를 사용하는 방법은 다음과 같습니다:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

또는 Kaggle Notebook/Google Colab에서 시도해볼 수도 있습니다:

Kaggle Notebook에서 PyGWalker 실행 (opens in a new tab)Google Colab에서 PyGWalker 실행 (opens in a new tab)PyGWalker에 ⭐️ 주기 (opens in a new tab)
Kaggle Notebook에서 PyGWalker 실행 (opens in a new tab)Google Colab에서 PyGWalker 실행 (opens in a new tab)PyGWalker에 ⭐️ 주기 (opens in a new tab)

PyGWalker는 오픈 소스 커뮤니티의 지원을 받아 개발되었습니다. PyGWalker GitHub (opens in a new tab)에서 ⭐️을 주시는 것을 잊지 마세요!

자주 묻는 질문:

Polars를 사용하면서 몇 가지 질문이 생길 수 있습니다. 일반적인 질문 몇 가지를 알려드리겠습니다:

  1. Polars의 read_csv()와 scan_csv() 함수 사이의 주요 차이점은 무엇인가요?

read_csv()는 간편한 함수로, CSV 파일을 읽고 데이터를 전체적으로 메모리에 로드합니다. 반면 scan_csv()는 지연 평가(lazy evaluation) 방식으로 작동하여, collect()이 호출될 때까지 데이터를 로드하지 않습니다. 이로 인해 scan_csv()는 필요한 데이터만 메모리에 로드하여 대용량 데이터셋 작업에 더 효율적입니다.

  1. Polars는 CSV 파일을 읽을 때 날짜 파싱을 처리할 수 있나요?

네, Polars는 날짜 파싱을 처리할 수 있습니다. read_csv() 함수를 사용할 때 parse_dates=True 인수를 설정하면, Polars가 자동으로 날짜 정보가 포함된 열을 파싱하려고 시도합니다.

  1. CSV 파일을 읽을 때 특정 열의 데이터 유형을 변경할 수 있나요?

물론 가능합니다. Polars는 CSV 파일을 읽는 동안 열 데이터 유형을 수정할 수 있습니다. with_columns() 메서드와 cast() 함수를 함께 사용하여 이를 수행할 수 있습니다. 예를 들어, df = pl.read_csv('data.csv').with_columns(pl.col('Age').cast(pl.Int32))는 'Age' 열을 Int32로 변경합니다.