Polars:Series转列广播报错,求适配新版本的正确写法
Polars 1.x中为每行添加Series列的解决方法
问题描述
在Polars < 1版本中可正常运行的代码:
df.with_columns(pl.Series('k_list', [0, 1])).explode('k_list')
在Polars 1.x版本中运行会报错:Séries k_list, length 2 doesn't match the dataframe height of ...,原因是新版本对列长度的校验更严格,不再允许长度不匹配的Series直接广播。
解决方法
要为DataFrame的每一行添加包含指定元素的列表列,有两种实用方式:
使用
pl.lit()包装列表,Polars会自动将列表广播到每一行:df.with_columns(k_list=pl.lit([0, 1])).explode('k_list')用
pl.repeat()显式生成与DataFrame行数一致的列,每个元素为目标列表:df.with_columns(k_list=pl.repeat([0, 1], n=len(df))).explode('k_list')
原理说明
Polars 1.x要求新增列的长度必须与DataFrame的行数完全匹配。pl.lit([0,1])会将列表作为单个元素处理,自动广播到所有行;pl.repeat()则是直接生成对应行数的列,每个位置都填充目标列表。两种方式生成的列经过explode()展开后,均可得到与旧版本代码相同的结果。
内容的提问来源于stack exchange,提问作者Mac Fly
相关产品推荐
相关产品推荐

