You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中将两列合并为{key:value}字典格式?

如何在Polars中将两列合并为{key:value}字典格式?

嘿,我来帮你搞定这个需求!你想要把Polars DataFrame里的两列合并成每行一个{key:value}的字典列,对吧?我给你两种实用的方法,你可以根据自己的场景选择。

首先先把你的示例数据再贴出来,方便我们对照:

import polars as pl

df = pl.DataFrame({
    "name": ["Chuck", "John", "Alice"],
    "surname": ["Dalliston", "Doe", "Smith"]
})

方法一:直观的逐行构造法(适合小数据集或快速验证)

用map_elements可以很直观地对每行的两个字段进行处理,直接返回我们需要的字典:

df = df.with_columns(
    name_surname=pl.struct("name", "surname").map_elements(
        lambda x: {x["name"]: x["surname"]},
        return_dtype=pl.Dict(pl.String, pl.String)
    )
)

这里我们先把name和surname列打包成一个struct,然后用map_elements遍历每个struct,把它转换成以name值为键、surname值为值的字典,同时指定返回类型为pl.Dict确保类型正确。

运行后你就能得到预期的结果:

shape: (3, 3)
┌───────┬──────────┬──────────────────────────┐
│ name  │ surname  │ name_surname             │
│ ---   │ ---      │ ---                      │
│ str   │ str      │ dict[str, str]           │
├───────┼──────────┼──────────────────────────┤
│ Chuck │ Dalliston│ {"Chuck": "Dalliston"}   │
│ John  │ Doe      │ {"John": "Doe"}          │
│ Alice │ Smith    │ {"Alice": "Smith"}       │
└───────┴──────────┴──────────────────────────┘

方法二:更简洁的zip写法

如果你觉得上面的struct打包有点麻烦,也可以直接用zip把两列的值配对,再转成字典:

df = df.with_columns(
    name_surname=pl.col("name").zip(pl.col("surname")).map_elements(
        lambda x: {x[0]: x[1]},
        return_dtype=pl.Dict(pl.String, pl.String)
    )
)

这个方法和第一种本质上差不多,只是用zip替代了struct来配对每行的两个值,代码更紧凑一点。

小提醒

  • 如果你处理的是超大型数据集,逐行处理的map_elements可能会比向量化操作慢一点,但对于大多数日常场景来说完全够用。
  • 记得指定return_dtype,这样Polars能明确知道新列的类型,避免自动推断可能带来的问题。

备注:内容来源于stack exchange,提问作者Dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 06:54:37