从 Pandas 到 Polars 四十一:检查Polars的查询

发布于:2024-07-30 ⋅ 阅读:(173) ⋅ 点赞:(0)

Polars的一个强大特性是其查询优化器,它可以查看您整套操作以寻找任何可能的效率提升。

但是,如果您想查看查询中某个中间点发生了什么怎么办?

在这种情况下,我们可以在查询中添加一个.inspect()的调用。这会在优化后的查询图中的该节点处打印数据框。

我们在下面的示例中可以看到这一点,我们在进行分组之前先进行了过滤。通过在过滤和分组之间添加inspect,我们可以在查询的该点处打印输出。

(
    pl.scan_csv(csvFile,parse_dates = True)
    .filter(pl.col("passenger_count") > 5)
    .inspect()
    .groupby("VendorID")
    .agg(pl.col("trip_distance").mean())
    .collect(allow)streaming = True)
    .head(3)
)

在 Polars 中,inspect 方法是一个非常有用的工具,它允许你在执行一系列操作的过程中插入一个检查点,以查看 DataFrame 的状态。这在调试和理解数据流时非常有用。

适用情况:

  • 在一系列操作之间检查 DataFrame 的状态。
  • 在调试复杂的数据管道时,查看中间结果。
  • 在开发新功能或验证数据转换逻辑时,观察 DataFrame 的变化。

比如,你有一个 DataFrame,你想在一系列操作之间查看它的状态,可以这样做:

import polars as pl

df = pl.DataFrame({
    'a': [1, 2, 3, 4, 5],
    'b': [5, 4, 3, 2, 1],
    'c': ['x', 'y', 'z', 'x', 'y']
})

# 在操作链中使用 .inspect
result = (
    df
    .filter(pl.col('a') > 2)
    .with_columns(pl.col('a').cumsum().alias('cumulative_sum'))
    .inspect(lambda df: print(df)) # 检查点一:过滤操作之后
    .filter(pl.col('b') > 3)
    .inspect(lambda df: print(df)) # 检查点二:分组聚合操作之前
    .groupby('c').agg(pl.col('cumulative_sum').mean())
    .inspect(lambda df: print(df))
)

print(result)

在这个例子中,我们使用了 inspect 方法两次,分别在过滤操作之后和分组聚合操作之前。每次 inspect 都会打印当前 DataFrame 的状态,这有助于理解数据在每个阶段的状态。

注意:

  • inspect 方法不会改变 DataFrame 的状态,它只是用于查看和调试。
  • 如果你没有提供回调函数,inspect 将默认使用 print 函数来打印 DataFrame。
  • 在使用 inspect 时,要注意不要在生产代码中留下不必要的检查点,因为这可能会影响性能。

通过在操作链中插入检查点,你可以观察 DataFrame 在各个阶段的状态,这在调试复杂查询时非常有用!

     往期热门文章:

从 Pandas 到 Polars 二十六:在Polars中,不要遍历列

从 Pandas 到 Polars 二十三:如果你的数据已经排序,Polars可以为你提供助力

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

从 Pandas 到 Polars 十三:流式处理的关键参数

从 Pandas 到 Polars 十:“Polars 表达式“是什么?

从 Pandas 到 Polars 六:在 Polars 中流式处理大型数据集

从 Pandas 到 Polars 0:理解Polars嵌套列类型


网站公告

今日签到

点亮在社区的每一天
去签到