在Polars现有DataFrame中添加列的正确方法探讨
在Polars中添加列的正确做法
你用df = df.with_columns(...)的方式添加列完全正确,这是Polars官方推荐的标准用法。
为什么要重新赋值?
Polars的核心设计之一是不可变性:所有DataFrame对象默认是只读的,任何修改操作(包括添加、删除列,修改数据)都不会直接改动原对象,而是返回一个全新的DataFrame。这种设计保证了线程安全,也让链式调用、回溯操作更可靠。
会不会浪费资源?
完全不用担心“重写整个DataFrame”的性能问题——Polars内部做了零拷贝优化:新生成的DataFrame会直接复用原DataFrame中未修改的列的数据,只有新增的列会被创建,不会复制整个数据集的内容。比如你原DataFrame有10列,新增1列,实际只需要生成这1列的数据,其余10列都是直接引用原数据,资源消耗极低。
有没有“原地修改”的方式?
Polars提供了with_columns_inplace()方法可以直接修改原DataFrame,但这种写法不推荐:原地修改会破坏不可变性,容易在多线程环境、复杂计算流程中引发意外的bug,也不利于代码的可读性和调试。官方始终建议使用返回新对象并重新赋值的方式。
示例代码
推荐的标准写法:
import polars as pl # 初始化DataFrame df = pl.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) # 添加新列,重新赋值给df df = df.with_columns(new_column=pl.lit("some_text"))
不推荐的原地修改写法:
# 直接修改原对象,不推荐 df.with_columns_inplace(new_column=pl.lit("some_text"))
内容的提问来源于stack exchange,提问作者DeltaIV
相关产品推荐
相关产品推荐

