ZetCode

Python Polars 教程

最后修改时间:2025年3月1日

Polars 是一个快速的 Python DataFrame 库,专为高效的数据操作和分析而设计。它以性能为导向,底层利用 Rust 实现。本教程将通过实际示例介绍 Polars。

Polars 支持懒惰和即时执行模式,非常适合处理大型数据集。它提供了一个类似 Pandas 的 API,并增加了额外的优化。

创建 DataFrame

本示例展示了如何从字典创建 Polars DataFrame。

create_df.py
import polars as pl

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}

df = pl.DataFrame(data)
print(df)

pl.DataFrame 函数从字典创建 DataFrame。这是初始化 Polars DataFrame 最简单的方法。

读取 CSV 文件

本示例演示了如何将 CSV 文件读取到 Polars DataFrame 中。

read_csv.py
import polars as pl

df = pl.read_csv('data.csv')
print(df)

pl.read_csv 函数将 CSV 文件读取到 DataFrame 中。Polars 支持各种文件格式,包括 Parquet 和 JSON。

过滤行

本示例展示了如何根据条件过滤行。

filter_rows.py
import polars as pl

df = pl.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
})

filtered_df = df.filter(pl.col('Age') > 30)
print(filtered_df)

filter 方法根据“Age”列大于 30 的条件过滤行。Polars 使用表达式进行高效过滤。

选择列

本示例演示了如何从 DataFrame 中选择特定列。

select_columns.py
import polars as pl

df = pl.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

selected_df = df.select(['Name', 'City'])
print(selected_df)

select 方法从 DataFrame 中选择特定列。这对于关注相关数据非常有用。

添加新列

本示例展示了如何向 DataFrame 添加新列。

add_column.py
import polars as pl

df = pl.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
})

df = df.with_column((pl.col('Age') * 2).alias('DoubleAge'))
print(df)

with_column 方法添加了一个名为“DoubleAge”的新列,该列是“Age”列的两倍。Polars 支持列对列的操作。

分组和聚合

本示例演示了如何对数据进行分组并计算聚合统计量。

group_agg.py
import polars as pl

df = pl.DataFrame({
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago'],
    'Sales': [100, 200, 150, 300]
})

grouped_df = df.groupby('City').agg([
    pl.col('Sales').sum().alias('TotalSales')
])
print(grouped_df)

groupbyagg 方法按“City”对数据进行分组,并计算每个城市的总销售额。Polars 支持高效的分组。

排序数据

本示例展示了如何按特定列对 DataFrame 进行排序。

sort_data.py
import polars as pl

df = pl.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
})

sorted_df = df.sort('Age', reverse=True)
print(sorted_df)

sort 方法按“Age”列以降序对 DataFrame 进行排序。Polars 提供高效的排序算法。

懒惰执行

本示例演示了如何使用懒惰执行来优化性能。

lazy_execution.py
import polars as pl

df = pl.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
})

lazy_df = df.lazy().filter(pl.col('Age') > 30).collect()
print(lazy_df)

lazy 方法启用懒惰执行,它会在执行前优化查询。使用 collect 触发计算。

使用 Polars 的最佳实践

来源

Polars 文档

在本文中,我们通过实际示例探索了 Polars 的基础知识。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

所有 Polars 教程列表。