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 表达式“是什么?