Polars简明基础教程二:懒惰模式 1:引入懒惰模式

到本讲结束时,您将能够:

  • 从CSV文件创建一个LazyFrame
  • 解释DataFrame和LazyFrame之间的区别
  • 打印优化的查询计划

懒加载模式对于充分利用Polars的查询优化和流式处理大数据集至关重要。我们在本课中介绍懒加载模式,并在整个课程中反复提及它。

代码还是查询?

数据分析通常涉及多个步骤:

  1. 从文件或数据库加载数据
  2. 转换数据
  3. 按列分组
  4. ...

我们称这组步骤为一个查询。

我们可以编写几行代码,在急迫模式下逐步执行查询。

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值