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
相关产品推荐
相关产品推荐

