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

Polars声明pl.List报错:TypeError: 'DataTypeClass'对象不可下标

正确声明Polars中包含List类型列的DataFrame

错误原因

你碰到的TypeError: 'DataTypeClass' object is not subscriptable,是因为pl.List是类型类,不能通过下标[pl.Int64]指定元素类型,正确的做法是调用它并传入元素类型参数。

正确的声明方式

方法1:在schema列表中直接使用pl.List(元素类型)

import polars as pl

cart_schema = [
    ("CART_ID", pl.Int64),
    ("ORDERS", pl.List(pl.Int64)),
    ("TOTAL_DISTANCE", pl.Float64),
    ("TOTAL_WEIGHT", pl.Float64)
]
carts = pl.DataFrame([], schema=cart_schema)

方法2:用pl.Schema对象定义schema

这种方式可读性更强,适合复杂schema场景:

import polars as pl

cart_schema = pl.Schema({
    "CART_ID": pl.Int64,
    "ORDERS": pl.List(pl.Int64),
    "TOTAL_DISTANCE": pl.Float64,
    "TOTAL_WEIGHT": pl.Float64
})
carts = pl.DataFrame([], schema=cart_schema)

方法3:通过空序列推导类型(适合快速测试)

如果不想显式写schema,也可以直接传入指定类型的空序列:

import polars as pl

carts = pl.DataFrame({
    "CART_ID": pl.Series([], dtype=pl.Int64),
    "ORDERS": pl.Series([], dtype=pl.List(pl.Int64)),
    "TOTAL_DISTANCE": pl.Series([], dtype=pl.Float64),
    "TOTAL_WEIGHT": pl.Series([], dtype=pl.Float64)
})

关于你当前的方法

你先创建带初始数据再过滤的方式虽然能得到空DataFrame,但会额外生成一行临时数据再删除,属于冗余操作,不如上面直接声明的方式高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:50:00