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

Polars向指定Schema的空DataFrame添加列报错问题咨询

Polars空DataFrame添加列报错的原因及解决方法

报错原因

Polars的with_columns方法要求新增列的长度必须与原DataFrame的行数严格匹配。你创建的是空DataFrame(行数为0),但新增的my_int_col列长度为5,行数不匹配,因此抛出ShapeError。

这是Polars的设计特性:它坚持显式优先的原则,不像Pandas那样允许隐式填充空值,目的是避免静默的隐式操作导致意外错误(比如类型不匹配、行数误判等)。

解决方法

方法1:直接构造目标DataFrame(推荐)

直接传入已有数据的列,Polars会自动为Schema中其他列填充对应类型的空值:

df = pl.DataFrame(
    {"my_int_col": [1, 2, 3, 4, 5]},
    schema={"my_string_col": str, "my_int_col": int, "my_bool_col": bool}
)

生成的DataFrame中,my_string_col会填充字符串类型的None,my_bool_col填充布尔类型的None,行数统一为5。

方法2:从空DataFrame扩展后填充

如果必须从空DataFrame开始操作,先扩展行数至目标长度,再更新列:

# 创建空Schema的DataFrame
df = pl.DataFrame(schema={"my_string_col": str, "my_int_col": int, "my_bool_col": bool})

# 扩展至5行,所有列填充对应类型的空值
df = df.extend(pl.DataFrame([None]*3, schema=df.schema).repeat(5))

# 更新my_int_col列
df = df.with_columns(pl.Series(name="my_int_col", values=[1, 2, 3, 4, 5]))

方法3:显式构造所有列

直接通过pl.select显式定义每一列,包括空值列:

df = pl.select(
    pl.Series(name="my_int_col", values=[1, 2, 3, 4, 5]),
    pl.lit(None).cast(str).alias("my_string_col"),
    pl.lit(None).cast(bool).alias("my_bool_col")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:42:45