Polars中List[str]列list.concat行为异常:与List[i64]表现差异问询
这是Polars的预期行为
原因解析
Polars的list.concat方法设计时,会优先将传入的字符串列表解析为列名集合,而非字面量字符串的集合。这是因为该方法的核心用途之一是拼接DataFrame中其他列的列表型数据(例如pl.col("libs").list.concat([pl.col("other_list_col1"), pl.col("other_list_col2")]))。
当你执行pl.col("libs").list.concat(["gg", "hh"])时,Polars会尝试查找名为"gg"和"hh"的列,由于你的DataFrame中不存在这些列,因此抛出ColumnNotFoundError。报错信息中提到"dd"是Polars内部解析逻辑的细节(不同版本可能有差异),核心原因还是列名查找失败。
而你提到的数值列表可以正常执行,是因为Polars对数值类型做了特殊的隐式转换:数值很少被用作列名,因此Polars会自动将数值列表中的每个元素转为pl.lit()字面量表达式,从而实现拼接固定数值的效果。
正确写法
要拼接固定字符串列表,你有两种简洁的写法:
- 每个字符串单独用
pl.lit()包装:
df.with_columns(pl.col("libs").list.concat([pl.lit("gg"), pl.lit("hh")]))
- 将整个字符串列表转为单个字面量列表,再传入
list.concat:
df.with_columns(pl.col("libs").list.concat(pl.lit(["gg", "hh"])))
这两种写法都能正确将固定字符串追加到libs列的每个列表元素中。
内容的提问来源于stack exchange,提问作者dikesh
相关产品推荐
相关产品推荐

