进阶 lmql.ai 2026-10-11 18:10:44 · 33 阅读

第32章 Pandas 集成指南

Pandas:将LMQL结果处理为Pandas DataFrame

当在Python中使用时,LMQL查询可以被视为简单的Python函数。这意味着使用LMQL构建流水线非常简单,只需将函数串联起来即可。然而,除了易于集成之外,LMQL查询还为返回值的数据类型和结构提供了保证的输出格式。这使得我们能够以结构化的方式轻松处理LMQL查询的输出,例如使用基于表格或数组的数据处理库,如Pandas。

表格数据生成

例如,要使用LMQL生成表格数据,以下代码片段展示了如何使用Pandas处理LMQL查询的输出:

```python import lmql import pandas as pd

@lmql.query async def generate_dogs(n): '''lmql sample(temperature=1.0, n=n) """Generate a dog with the following characteristics: Name:[NAME] Age: [AGE] Breed:[BREED] Quirky Move:[MOVE] """ where STOPS_BEFORE(NAME, "\n") and STOPS_BEFORE(BREED, "\n") and \ STOPS_BEFORE(MOVE, "\n") and INT(AGE) and len(TOKENS(AGE)) < 3 '''

result = await generate_dogs(8) df = pd.DataFrame([r.variables for r in result]) df ```

输出结果如下: ``` result NAME AGE BREED \ 0 Storm 2 Golden Retriever 1 2 Golden Retriever 2 Lucky 3 Golden Retriever 3 Rocky 4 Labrador Retriever 4 Rex 11 Golden Retriever 5 Murky 5 Cocker Spaniel 6 Gizmo 5 Poodle 7 Bubba 3 Bulldog

MOVE 0 Spinning in circles while chasing its own tail 1 Wiggles its entire body when excited 2 Wiggles butt while walking 3 Loves to chase squirrels 4 Barks at anything red 5 Wiggle butt 6 Spinning in circles 7 ```

请注意,我们使用 `sample(temperature=1.0, n=n)` 解码器语句采样多个序列(即多个狗狗实例)。

返回的结果是一个 `lmql.LMQLResult` 列表,我们可以轻松地通过访问每个元素的 `r.variables` 将其转换为 `pandas.DataFrame`。

在查询中,我们使用脚本式提示和约束条件,以确保生成的狗狗样本有效,并且每个样本都提供姓名、年龄、品种和动作这四个属性。

数据处理

将LMQL模板变量 NAME、AGE、BREED 和 MOVE 的结果值转换为 `pandas.DataFrame` 后,我们可以轻松地进行进一步处理,并操作生成的数据。

例如,我们可以轻松地计算生成狗狗的平均年龄:

```python # determine average age df["AGE"].mean() ``` 输出结果: ``` 6.0 ```

请注意,`INT(AGE)` 约束自动将 AGE 值转换为整数,这使得生成的 AGE 值可以直接进行算术运算,例如使用 `mean()` 函数。

基于这种表格表示形式,过滤和聚合数据也变得非常容易。例如,我们可以轻松计算每个品种生成狗狗的平均年龄:

```python # group df by BREED and compute the average age for each breed df.groupby("BREED")["AGE"].mean() ``` 输出结果: ``` BREED Corgi 5.00 Golden Retriever 14.75 Labrador Retriever 5.00 Poodle 2.00 Name: AGE, dtype: float64 ```

评论 (0)