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

如何用Polars更优雅地从列表向现有DataFrame添加空列?

问题

我希望将列表中的元素作为列名,向现有的Polars DataFrame添加新的空列。目前我通过以下代码实现:

import polars as pl

df = pl.DataFrame({'a': [1,2,3]})
mylist = [f'col{i}' for i in range(1,4)]
data = [[''] for i in range(1,len(mylist)+1)]

df.join(pl.DataFrame(data=data,schema=mylist),
        how='cross')

但有没有更具Polars风格的实现方式?比如使用.with_columns()或pl.any()?这样就无需创建新DataFrame并进行关联操作。

更具Polars风格的实现方式

直接用.with_columns()结合pl.lit()就能高效完成需求,完全不需要创建临时DataFrame做交叉连接,这是Polars推荐的原生写法:

方式1:添加空字符串列

遍历列名列表,为每个列名生成空字符串列:

import polars as pl

df = pl.DataFrame({'a': [1,2,3]})
mylist = [f'col{i}' for i in range(1,4)]

df = df.with_columns([pl.lit("").alias(col) for col in mylist])

方式2:添加空值(None)列

如果需要的是None类型的空列(而非空字符串),可以指定数据类型:

df = df.with_columns([pl.lit(None, dtype=pl.String).alias(col) for col in mylist])

方式3:批量添加同类型空列

如果所有新列都是同一数据类型,也可以用pl.select()配合pl.all()保留原有列,再批量生成新列:

df = df.select(
    pl.all(),
    *[pl.lit("").alias(col) for col in mylist]
)

这些写法更贴合Polars的API设计,代码更简洁,性能也远优于交叉连接——交叉连接会额外创建临时DataFrame,而直接用with_columns()是在原DataFrame基础上直接扩展列,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:04:57