네 번째 포스팅, "Polars DataFrame과 Series: 핵심 자료 구조 완벽 해부" 를 시작해 보겠습니다!
이번 포스팅에서는 Polars 데이터 분석의 가장 기본적인 구성 요소인 DataFrame과 Series를 낱낱이 파헤쳐 보겠습니다. 이 두 가지 자료 구조를 제대로 이해하는 것은 Polars를 효과적으로 활용하기 위한 필수 단계입니다. 초보자분들도 쉽게 이해하실 수 있도록 개념부터 생성 방법, 다양한 속성, 데이터 타입까지 꼼꼼하게 설명해 드릴게요. 이해도 쏙쏙 높이도록 이미지와 코드 예시도 풍부하게 준비했으니, 편안하게 따라오세요! 😄
Polars DataFrame & Series 완벽 해부 🦴: 데이터 분석의 뼈대, 핵심 자료 구조 마스터하기
Polars 데이터 분석의 기본, DataFrame과 Series! 이 둘만 알면 Polars 절반은 정복!
지난 포스팅까지 Polars 설치와 개발 환경 설정까지 완료했습니다. 이제 본격적으로 Polars의 핵심 기능들을 하나씩 배워볼 차례입니다. 이번 포스팅에서는 Polars 데이터 분석의 가장 기본적인 뼈대라고 할 수 있는 DataFrame과 Series에 대해 자세히 알아보겠습니다. DataFrame과 Series는 Polars를 사용하여 데이터를 효율적으로 관리하고 분석하는 데 필수적인 자료 구조입니다. 이번 포스팅을 통해 이 두 가지 자료 구조를 확실하게 마스터하고 Polars 데이터 분석의 기초를 튼튼하게 다져보세요!
1. DataFrame: 테이블 형태 데이터의 왕 👑 (DataFrame 개념)
DataFrame은 Polars에서 2차원 테이블 형태의 데이터를 표현하는 핵심 자료 구조입니다. 엑셀 시트, SQL 테이블, Pandas DataFrame과 매우 유사한 구조를 가지고 있다고 생각하시면 됩니다. DataFrame은 행 (row) 과 열 (column) 으로 구성되며, 각 열은 동일한 데이터 타입을 갖는 Series 객체로 이루어져 있습니다. DataFrame은 다양한 데이터 타입을 담을 수 있으며, 대규모 데이터를 효율적으로 처리하고 분석하는 데 최적화되어 있습니다.
* 2차원 테이블 구조: 행과 열로 구성된 표 형태의 데이터 구조
* Columnar 데이터 포맷: 각 열은 Series 객체, 동일 데이터 타입
* 다양한 데이터 타입: 정수, 실수, 문자열, 날짜/시간, 불리언 등 다양한 데이터 타입 지원
* 대용량 데이터 처리: 효율적인 메모리 관리, 빠른 연산 속도
2. Series: 데이터 열, DataFrame의 기둥 🧱 (Series 개념)
Series는 DataFrame을 구성하는 1차원 데이터 배열입니다. DataFrame의 각 열은 Series 객체로 표현됩니다. Series는 동일한 데이터 타입의 값들을 순서대로 담고 있으며, 이름 (name) 과 데이터 타입 (dtype) 속성을 가집니다. Series는 DataFrame의 부분집합이면서, 독립적으로도 데이터 분석에 활용될 수 있는 중요한 자료 구조입니다.
* 1차원 데이터 배열: 순서대로 나열된 값들의 집합
* 동일 데이터 타입: Series 내 모든 요소는 동일한 데이터 타입
* 이름 (name) 속성: Series 이름 (컬럼 이름)
* 데이터 타입 (dtype) 속성: Series 데이터 타입 정보
* DataFrame의 열 (column) 구성 요소
3. DataFrame 생성하기 🛠️ (DataFrame 생성 방법)
Polars DataFrame을 생성하는 다양한 방법을 알아봅니다. 리스트, 딕셔너리, NumPy 배열, CSV 파일 등 다양한 데이터 소스로부터 DataFrame을 생성할 수 있습니다.
(1) 리스트 (List) 로부터 생성
파이썬 리스트를 사용하여 DataFrame을 생성하는 가장 기본적인 방법입니다. 리스트의 리스트 (List of Lists) 형태로 데이터를 준비하고 pl.DataFrame() 생성자에 전달합니다. schema 매개변수를 사용하여 컬럼 이름을 지정할 수 있습니다.
import polars as pl
# 데이터: 리스트의 리스트
data = [
[1, "Alice", 25, "Seoul"],
[2, "Bob", 30, "Busan"],
[3, "Charlie", 28, "Daegu"],
]
# 컬럼 이름: 리스트
columns = ["id", "name", "age", "city"]
# DataFrame 생성
df = pl.DataFrame(data, schema=columns)
print(df)
실행 결과:
shape: (3, 4)
┌─────┬─────────┬──────┬─────────┐
│ id ┆ name ┆ age ┆ city │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ i64 ┆ str │
╞═════╪═════════╪════════╪═════════╡
│ 1 ┆ Alice ┆ 25 ┆ Seoul │
│ 2 ┆ Bob ┆ 30 ┆ Busan │
│ 3 ┆ Charlie ┆ 28 ┆ Daegu │
└───────┴─────────────────┴──────────────┴─────────────────┘
(2) 딕셔너리 (Dictionary) 로부터 생성
파이썬 딕셔너리를 사용하여 DataFrame을 생성하는 방법입니다. 딕셔너리의 키 (key) 는 컬럼 이름, 값 (value) 은 컬럼 데이터 (리스트 형태) 가 됩니다. pl.DataFrame() 생성자에 딕셔너리를 직접 전달합니다.
import polars as pl
# 데이터: 딕셔너리
data = {
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 28],
"city": ["Seoul", "Busan", "Daegu"],
}
# DataFrame 생성
df = pl.DataFrame(data)
print(df)
실행 결과: (위와 동일)
(3) NumPy 배열 (NumPy ndarray) 로부터 생성
NumPy 배열을 사용하여 DataFrame을 생성할 수도 있습니다. NumPy 배열을 pl.DataFrame() 생성자에 전달하고, schema 매개변수로 컬럼 이름을 지정합니다.
import polars as pl
import numpy as np
# 데이터: NumPy 배열
data = np.array([
[1, "Alice", 25, "Seoul"],
[2, "Bob", 30, "Busan"],
[3, "Charlie", 28, "Daegu"],
])
# 컬럼 이름: 리스트
columns = ["id", "name", "age", "city"]
# DataFrame 생성
df = pl.DataFrame(data, schema=columns)
print(df)
실행 결과: (위와 동일)
(4) CSV 파일 (CSV file) 로부터 생성
CSV 파일로부터 DataFrame을 생성하는 방법은 실무에서 가장 많이 사용되는 방법 중 하나입니다. pl.read_csv() 함수를 사용하여 CSV 파일을 DataFrame으로 간편하게 읽어올 수 있습니다. 파일 경로를 함수 인자로 전달합니다.
import polars as pl
# CSV 파일 경로 (예시)
csv_file = "data/sample.csv" # 실제 CSV 파일 경로로 변경 필요
# CSV 파일로부터 DataFrame 생성
df = pl.read_csv(csv_file)
print(df)
data/sample.csv 파일 (예시):
id,name,age,city
1,Alice,25,Seoul
2,Bob,30,Busan
3,Charlie,28,Daegu
실행 결과: (위와 동일)
(5) 기타 다양한 데이터 소스
Polars는 CSV 파일 외에도 Parquet, JSON, DataFrame, Arrow IPC, Feather, ndjson, tbl, 및 SQL 데이터베이스 등 다양한 데이터 소스로부터 DataFrame을 생성하는 기능을 제공합니다. 각 데이터 소스별 pl.read_*() 함수를 활용하여 데이터를 효율적으로 읽어올 수 있습니다. 자세한 내용은 Polars 공식 문서를 참고하세요.
4. Series 생성하기 🛠️ (Series 생성 방법)
Polars Series를 생성하는 방법도 DataFrame 생성과 유사합니다. 리스트, NumPy 배열 등을 사용하여 Series를 생성할 수 있습니다.
(1) 리스트 (List) 로부터 생성
파이썬 리스트를 pl.Series() 생성자에 전달하여 Series를 생성합니다. name 매개변수를 사용하여 Series 이름을 지정할 수 있습니다.
import polars as pl
# 데이터: 리스트
data = [10, 20, 30, 40, 50]
# Series 이름
name = "numbers"
# Series 생성
series = pl.Series(name, data)
print(series)
실행 결과:
shape: (5,)
Series: 'numbers' [i64]
[
10
20
30
40
50
]
(2) NumPy 배열 (NumPy ndarray) 로부터 생성
NumPy 배열을 pl.Series() 생성자에 전달하여 Series를 생성할 수도 있습니다.
import polars as pl
import numpy as np
# 데이터: NumPy 배열
data = np.array([1.1, 2.2, 3.3, 4.4, 5.5])
# Series 이름
name = "floats"
# Series 생성
series = pl.Series(name, data)
print(series)
실행 결과:
shape: (5,)
Series: 'floats' [f64]
[
1.1
2.2
3.3
4.4
5.5
]
(3) 범위 (Range) 로부터 생성
pl.Series() 생성자에 range() 함수를 사용하여 특정 범위의 정수 Series를 간편하게 생성할 수 있습니다.
import polars as pl
# 0부터 9까지의 정수 Series 생성
series = pl.Series("range", range(10))
print(series)
실행 결과:
shape: (10,)
Series: 'range' [i64]
[
0
1
2
3
4
5
6
7
8
9
]
(4) 반복 (Repeat) 값으로 생성
pl.repeat() 함수를 사용하여 특정 값으로 채워진 Series를 생성할 수 있습니다. value 매개변수에 반복할 값, n 매개변수에 Series 길이 (반복 횟수) 를 지정합니다.
import polars as pl
# 값 10을 5번 반복하는 Series 생성
series = pl.repeat(value=10, n=5, name="repeated_value")
print(series)
실행 결과:
shape: (5,)
Series: 'repeated_value' [i64]
[
10
10
10
10
10
]
5. DataFrame 속성 살펴보기 👀 (DataFrame Attributes)
DataFrame 객체는 다양한 속성을 제공하여 DataFrame의 구조, 크기, 데이터 타입 등의 정보를 확인할 수 있도록 해줍니다. 자주 사용되는 주요 속성을 알아봅니다.
* .shape: DataFrame의 형태 (shape), 즉 (행 수, 열 수) 튜플을 반환합니다.
print(df.shape) # DataFrame df의 형태 출력
실행 결과:
(3, 4) # 3행 4열
* .columns: DataFrame의 컬럼 이름 리스트를 반환합니다.
print(df.columns) # DataFrame df의 컬럼 이름 출력
실행 결과:
['id', 'name', 'age', 'city']
* .dtypes: DataFrame의 컬럼별 데이터 타입 리스트를 반환합니다.
print(df.dtypes) # DataFrame df의 컬럼별 데이터 타입 출력
실행 결과:
[Int64, Utf8, Int64, Utf8]
* .len(): DataFrame의 행 수를 반환합니다. (DataFrame 길이)
print(len(df)) # DataFrame df의 행 수 출력
실행 결과:
3 # 3행
* .width: DataFrame의 열 수를 반환합니다. (DataFrame 너비)
print(df.width) # DataFrame df의 열 수 출력
실행 결과:
4 # 4열
6. Series 속성 살펴보기 👀 (Series Attributes)
Series 객체도 DataFrame과 마찬가지로 다양한 속성을 제공합니다. Series의 이름, 데이터 타입, 크기 등의 정보를 속성을 통해 확인할 수 있습니다.
* .name: Series 이름을 반환합니다.
print(series.name) # Series series의 이름 출력
실행 결과:
repeated_value
* .dtype: Series 데이터 타입을 반환합니다.
print(series.dtype) # Series series의 데이터 타입 출력
실행 결과:
Int64
* .shape: Series 형태 (shape), 즉 (요소 수,) 튜플을 반환합니다.
print(series.shape) # Series series의 형태 출력
실행 결과:
(5,) # 5개 요소
* .len(): Series 요소 수를 반환합니다. (Series 길이)
print(len(series)) # Series series의 요소 수 출력
실행 결과:
5 # 5개 요소
7. DataFrame과 Series, Pandas와의 비교 🤝 (Pandas Comparison)
Polars DataFrame과 Series는 Pandas DataFrame과 Series와 매우 유사한 개념과 기능을 제공합니다. Pandas를 사용해보셨던 분이라면 Polars의 DataFrame과 Series를 쉽게 이해하고 사용할 수 있습니다. 주요 유사점과 차이점을 간략하게 정리해 보겠습니다.
* 유사점:
* 테이블/컬럼 형태 자료 구조: DataFrame은 2차원 테이블, Series는 1차원 컬럼 형태의 데이터를 표현하는 것은 동일합니다.
* 데이터 조작 및 분석 기능: 데이터 선택, 필터링, 정렬, 그룹핑, Join 등 기본적인 데이터 조작 및 분석 기능을 유사하게 제공합니다.
* 문법 유사성: API 문법이 상당 부분 유사하여 Pandas 사용자에게 친숙합니다.
* 차이점:
* 성능: Polars는 Pandas 대비 압도적인 성능 우위를 가집니다 (속도, 메모리 효율성).
* 아키텍처: Polars는 Rust 기반, 멀티 스레드, Apache Arrow Columnar 포맷을 사용하는 반면, Pandas는 Python/C 기반, 싱글 스레드, Row-based 포맷을 사용합니다.
* Lazy API: Polars는 Lazy API를 제공하여 쿼리 최적화가 가능하지만, Pandas는 Lazy 연산을 지원하지 않습니다.
* 기능: Polars는 Expression (Expr) 과 같은 강력하고 유연한 데이터 조작 기능을 제공하며, Window Function, 플러그인 등 Pandas에는 없는 기능들을 제공합니다.
마무리하며 👋
이번 포스팅에서는 Polars 데이터 분석의 핵심인 DataFrame과 Series에 대해 자세히 알아보았습니다. DataFrame과 Series는 Polars를 사용하여 데이터를 효율적으로 관리하고 조작하기 위한 기본적인 도구입니다. 이번 포스팅에서 배운 내용을 바탕으로 다음 포스팅부터는 Polars의 다양한 데이터 조작 기능들을 본격적으로 탐험해 보겠습니다. 많은 기대 부탁드립니다!
✨ Polars DataFrame과 Series, 이제 여러분의 손으로 자유롭게 주무르세요! ✨
#Polars #DataFrame #Series #자료구조 #Python #데이터분석 #튜토리얼 #기본 #Pandas #비교 #핵심
'파이썬 기초문법 > polars' 카테고리의 다른 글
Polars 설치 및 환경 설정 완벽 가이드 🛠️: 데이터 분석 시작을 위한 첫걸음 (0) | 2025.03.06 |
---|---|
Polars 집중 해부 🔎 : Pandas와 비교분석, Polars를 선택해야 하는 이유 (0) | 2025.02.12 |
Polars 블로그에 오신 것을 환영합니다! 🚀 (1) | 2025.02.12 |
polars 포스팅 일정 (0) | 2025.02.12 |