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

