Cheatsheet Python Polars: Hướng dẫn toàn diện từ sách O'Reilly

18 tháng 8, 2026·5 phút đọc

Bài viết giới thiệu cheatsheet chi tiết về thư viện Polars trong Python, dựa trên cuốn sách 'Python Polars: The Definitive Guide' của O'Reilly. Nội dung bao gồm cấu trúc dữ liệu, API eager/lazy, các phép biến đổi dữ liệu, biểu thức, và trực quan hóa với Great Tables và Plotnine, giúp lập trình viên xử lý dữ liệu nhanh chóng và hiệu quả.

Cheatsheet Python Polars: Hướng dẫn toàn diện từ sách O'Reilly

Cheatsheet Python Polars: Cẩm nang toàn diện cho xử lý dữ liệu tốc độ cao

Polars là thư viện Python mạnh mẽ cho việc chuyển đổi, phân tích và trực quan hóa dữ liệu với DataFrame API nhanh và biểu cảm. Được phát hành lần đầu bởi Ritchie Vink vào năm 2020, Polars nhanh chóng trở thành lựa chọn hàng đầu cho các nhà khoa học dữ liệu nhờ hiệu suất vượt trội và khả năng xử lý dữ liệu lớn hơn bộ nhớ. Cheatsheet này dựa trên cuốn sách "Python Polars: The Definitive Guide" của Jeroen Janssens và Thijs Nieuwdorp, xuất bản bởi O'Reilly.

Sơ đồ tổng quan về PolarsSơ đồ tổng quan về Polars

Cài đặt và khởi đầu nhanh

Cài đặt Polars với tất cả các dependency tùy chọn từ terminal:

uv pip install "polars[all]"

Nhập Polars trong Python và xác nhận phiên bản đã cài đặt:

import polars as pl
pl.show_versions()

Một truy vấn Polars điển hình thường đọc dữ liệu, biến đổi nó, và ghi kết quả ra. Một truy vấn hoàn chỉnh thường là một chuỗi các lời gọi phương thức:

fruit = pl.read_csv("fruit.csv")
fruit.filter(
    (pl.col("weight") > 1000) & pl.col("is_round")
).write_parquet("fruit.parquet")

Cấu trúc dữ liệu trong Polars

Polars lưu trữ dữ liệu trong một Series hoặc một DataFrame. Khác với pandas, DataFrame của Polars không có row index và API ưu tiên tính bất biến và chuỗi phương thức hơn là thay đổi trực tiếp.

Cấu trúcMô tả
SeriesMột chiều. Chứa một chuỗi các giá trị cùng kiểu dữ liệu.
DataFrameHai chiều. Có hàng và cột. Một hoặc nhiều Series có cùng độ dài.
LazyFrameGiống DataFrame nhưng không chứa dữ liệu. Là bản thiết kế để tạo DataFrame.

Tạo DataFrame từ dictionary các cột:

df = pl.DataFrame({
    "sales": [150.00, 300.00, 250.00],
    "id": [41, 42, 43]
})

API Eager và Lazy

API eager thực thi ngay lập tức, trong khi API lazy xây dựng một query plan được tối ưu hóa trước. Trình tối ưu tự động áp dụng predicate pushdown (lọc càng sớm càng tốt) và projection pushdown (loại bỏ các cột không dùng đến).

Chuyển đổi giữa hai dạng biểu diễn bằng .lazy().collect():

lf = df.lazy()
df = lf.collect()

Sử dụng streaming engine để xử lý dữ liệu ngoài bộ nhớ (out-of-core), cho phép xử lý các tập dữ liệu lớn hơn RAM:

lf.collect(engine="streaming")

Đọc và ghi dữ liệu

Polars hỗ trợ nhiều định dạng tệp khác nhau với các hàm read_*(), scan_*(), write_*(), và sink_*():

  • read_*(): đọc dữ liệu vào DataFrame
  • scan_*(): tạo LazyFrame, trì hoãn việc đọc cho đến khi collect
  • write_*(): ghi DataFrame xuống đĩa hoặc cloud storage
  • sink_*(): stream dữ liệu xuống đĩa mà không giữ toàn bộ trong bộ nhớ

Quét tệp trong cloud storage bằng URI với glob pattern:

pl.scan_parquet(
    "s3://bucket/*.parquet",
    storage_options={"aws_region": "us-east-2"}
)

Biến đổi dữ liệu

Chọn và tạo cột

Chọn cột theo tên hoặc theo kiểu dữ liệu:

df.select("a", "b")
df.select(pl.col("x") * 2)
df.select(cs.numeric())  # với polars.selectors

Thêm hoặc thay thế cột mới:

df.with_columns(new=pl.col("a") + 1)
df.with_columns(pl.col("a").fill_null(0))
df.with_row_index(name="id", offset=1)

Lọc, sắp xếp và cắt hàng

Lọc dữ liệu với nhiều điều kiện:

df.filter(pl.col("x") > 5)
df.filter(pl.col("valid") & (pl.col("x") > 5))
df.drop_nulls()
df.unique(subset=["x"], keep="first")

Sắp xếp và lấy mẫu:

df.sort("x", descending=True)
df.sort("x", "y", descending=[False, True])
df.sample(10)
df.top_k(5, by="score")

Trang 1 của cheatsheet PolarsTrang 1 của cheatsheet Polars

Biểu thức (Expressions) trong Polars

Biểu thức là một cây các phép toán mô tả cách xây dựng một hoặc nhiều Series. Mỗi biểu thức bắt đầu từ một cột, tất cả các cột, hoặc một giá trị literal:

pl.col("name")
pl.all()
pl.lit("ok")

Biểu thức điều kiện

Chuỗi when(), then(), và otherwise() để xây dựng biểu thức điều kiện:

df.with_columns(
    pl.when(pl.col("age") < 18).then(pl.lit("minor"))
    .when(pl.col("age") < 65).then(pl.lit("adult"))
    .otherwise(pl.lit("senior"))
    .alias("group")
)

Xử lý ngày giờ, chuỗi và danh sách

Polars sử dụng namespace riêng cho từng kiểu dữ liệu:

# Ngày giờ
e.dt.month()
e.dt.strftime("%Y-%m-%d")
e.dt.convert_time_zone("UTC")

# Chuỗi
e.str.contains("pattern")
e.str.to_uppercase()
e.str.extract(r"(\d+)")

# Danh sách
e.list.len()
e.list.get(0)
e.list.sort()

GroupBy và tổng hợp dữ liệu

Tách - Áp dụng - Kết hợp (Split. Apply. Combine.) với group_by:

dfg = df.group_by("x", "y")
dfg.len()  # đếm số hàng mỗi nhóm
dfg.mean()  # trung bình mỗi nhóm
dfg.agg(avg=pl.col("y").mean())

Sử dụng window expression với over() để thêm kết quả tổng hợp làm cột mới mà không làm sụp đổ các hàng:

df.with_columns(avg=pl.col("y").mean().over("x"))

Join và nối dữ liệu

Kết hợp nhiều DataFrame thành một:

df.join(o, on="key")  # inner join
df.join(o, on="key", how="left")
df.join(o, left_on="a", right_on="b")
df.join(o, on="key", how="full", coalesce=True)
df.join(o, on="key", how="semi")  # giữ hàng có match
df.join(o, on="key", how="anti")  # giữ hàng không match

Trực quan hóa dữ liệu

Polars tích hợp sẵn các phương thức vẽ biểu đồ dựa trên Altair:

df.plot.scatter(x="...", y="...", color="...")

Ngoài ra, nhiều thư viện khác hoạt động trực tiếp với Polars DataFrame bao gồm Plotnine, Plotly, hvPlot, Seaborn, và Matplotlib:

from plotnine import *
ggplot(df, aes(x="", y="", color="")) + geom_point()

Trang 2 của cheatsheet PolarsTrang 2 của cheatsheet Polars

Tạo bảng trình bày với Great Tables

Sử dụng Great Tables để biến DataFrame thành bảng trình bày chuyên nghiệp:

from great_tables import GT

(
    GT(df)
    .tab_stub(rowname_col="...")
    .cols_label(...)
    .tab_header(title="...")
    .fmt_number(...)
    .data_color(columns="...", palette="...")
)

Polars Cloud

Thực thi truy vấn trên một cụm instances trong môi trường riêng của bạn:

import polars_cloud as pc

ctx = pc.ComputeContext(
    workspace="workspace_name",
    cpus=4,
    memory=16,
    cluster_size=32
)

lf.remote(ctx).execute().await_result()

Thông tin về sách

Cheatsheet này dựa trên cuốn sách Python Polars: The Definitive Guide của Jeroen Janssens và Thijs Nieuwdorp, xuất bản bởi O'Reilly. Cuốn sách có sẵn ở cả định dạng in và ebook. Ghé thăm polarsguide.com để biết thêm chi tiết.

Chân dung tác giả Jeroen JanssensChân dung tác giả Jeroen Janssens

Chân dung tác giả Thijs NieuwdorpChân dung tác giả Thijs Nieuwdorp

Với hiệu suất vượt trội, API biểu cảm và khả năng mở rộng linh hoạt, Polars đang ngày càng khẳng định vị thế là thư viện xử lý dữ liệu hàng đầu trong hệ sinh thái Python, đặc biệt phù hợp cho các bài toán phân tích dữ liệu lớn tại Việt Nam và trên toàn thế giới.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗