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

Polars DataFrame转置嵌套列表报错:TypeError: 暂未实现嵌套对象类型

Polars嵌套列表转置的TypeError解决办法

直接加个参数就能搞定

你遇到的错误是因为Polars默认开启了严格类型检查(strict=True),嵌套列表转置后的类型没法被它自动识别。只需要在map_elements里加上strict=False参数,就能绕过这个校验,同时保留你原来的写法。

举个实际例子:

import polars as pl

# 先造个测试用的DataFrame
df = pl.DataFrame({
    "col1": [["a", "b"], ["x", "y"]],
    "col2": [[["b", "c"], ["b", "c"], ["b", "c"]], [["d", "e"], ["d", "e"]]]
})

# 给map_elements加strict=False就行
df = df.with_columns(
    pl.col("col2").map_elements(
        lambda x: list(zip(*x)),  # 这就是转置的核心逻辑,和你原来的写法一致
        strict=False  # 关键参数,关掉严格类型检查
    ).alias("col2_transposed")
)

print(df)

为啥加这个参数有用?

Polars的strict=True模式下,会强制检查map_elements返回值的类型是否和它推断的一致,但嵌套列表的转置操作,虽然结果还是list[list[str]],但Polars的类型推断在这种嵌套场景下还没完善,所以会报错。开strict=False就会跳过这个校验,直接接受返回的结果。

更严谨的写法(可选)

如果你不想依赖strict=False,也可以明确指定返回的类型,这样Polars就知道该怎么识别结果了,部分版本可能还是需要配合strict=False,看你用的Polars版本:

df = df.with_columns(
    pl.col("col2").map_elements(
        lambda x: list(zip(*x)),
        return_dtype=pl.List(pl.List(pl.Utf8)),  # 明确告诉Polars返回的是字符串嵌套列表
        strict=False
    ).alias("col2_transposed")
)

小提醒

如果你的嵌套列表是不规则的(比如子列表长度不一样),用zip(*x)会自动截断到最短的子列表长度。要是需要补全缺失值,可以用itertools.zip_longest,记得先导入这个模块。

内容的提问来源于stack exchange,提问作者gernophil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:09:59