到本讲结束时,您将能够:
- 从CSV文件创建一个LazyFrame
- 解释DataFrame和LazyFrame之间的区别
- 打印优化的查询计划
懒加载模式对于充分利用Polars的查询优化和流式处理大数据集至关重要。我们在本课中介绍懒加载模式,并在整个课程中反复提及它。
代码还是查询?
数据分析通常涉及多个步骤:
- 从文件或数据库加载数据
- 转换数据
- 按列分组
- ...
我们称这组步骤为一个查询。
我们可以编写几行代码,在急迫模式下逐步执行查询。
import polars as pl
# 创建一个示例 DataFrame
df = pl.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [5, 4, 3, 2, 1],
'c': ['x', 'y', 'z', 'x', 'y']
})
# 步骤 1: 筛选出 'a' 列大于 2 的行
filtered_df = df.filter(pl.col('a') > 2)
print(filtered_df)
# 步骤 2: 添加一列 'cumulative_sum',表示 'a' 列的累加和
filtered_df = filtered_df.with_columns(pl.col('a').cum_sum().alias('cumulative_sum'))
print(filtered_df)
# 步骤 3: 筛选出 'b' 列大于 3 的行
filtered_df = filtered_df.filter(pl.col('b') > 3)
print(filtered_df)
# 步骤 4: 按 'c' 列分组并计算 'cumulative_sum' 的平均值
result_df = filtered_df.group_by('c').agg(pl.col('cumulative_sum').mean())
print(result_df)
但这种方法存在两个问题:
- 每行代码都不知道其他代码在做什么。
- 每行代码都需要复制整个数据框。
相反,我们可以将步骤作为懒加载模式下的集成查询来编写。
import polars as pl
# 创建一个示例 DataFrame
df = pl.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [5, 4, 3, 2, 1],
'c': ['x', 'y', 'z', 'x', 'y']
})
# 构建惰性执行的查询计划
df_lazy = (
df.lazy()
.filter(pl.col('a') > 2)
.with_columns(pl.col('a').cum_sum().alias('cumulative_sum'))
.filter(pl.col('b') > 3)
.gro

最低0.47元/天 解锁文章
703

被折叠的 条评论
为什么被折叠?



