我想将列new_column添加到现有的数据帧df中.这个看起来像是一个复制品

Add new column to polars DataFrame

但这些问题的答案,以及许多类似问题的答案,并不能真正在existing个数据帧中增加一列.它们使用另一个数据帧创建一个新列.I think这可以像这样修复:

df = df.with_columns(
    new_column = pl.lit('some_text')
)

然而,仅仅为了添加几列而重写整个数据帧,对我来说似乎有点浪费.这是正确的做法吗?

推荐答案

你的问题表明,当你这样做的时候,你认为

df = df.with_columns(
    new_column = pl.lit('some_text')
)

你把所有的东西都复制到某个新的DF上,这将是非常低效的.

你是对的,这将是非常低效的,但事实并非如此.DataFrame只是一种组织指向实际数据的指针的方法.层次 struct 是你在顶部的数据帧.在DataFrame中是表示列的Serieses.即使在系列级别,它仍然只是指针,而不是数据.它由一个或多个块数组组成,符合apache arrow内存模型.

当你"创建一个新的df"时,你所做的只是组织指针,而不是数据.数据不会移动或复制.

相反,想想Pandas 的inplace个参数.这肯定会让人觉得你是在原地修改东西,而不是复制.

In Place通常不执行任何原地操作 而是复制并重新分配指针

https://github.com/pandas-dev/pandas/issues/16529#issuecomment-323890422

问题的关键在于,在pandas中,你所做的一切都会产生一个(或多个)副本.在polars中,情况并非如此,所以即使你分配了一个新的df,新的df也只是指向数据的外层.数据不会移动,也不会复制,除非您专门执行了这样的操作.

也就是说,有一些方法可以在不要求您使用df=df...语法的情况下插入列,但它们在幕后做的事情与使用首选赋值语法时没有什么不同.

Python相关问答推荐

试图找到Python方法来部分填充numpy数组

从numpy数组和参数创建收件箱

计算组中唯一值的数量

OR—Tools CP SAT条件约束

pyscript中的压痕问题

移动条情节旁边的半小提琴情节在海运

UNIQUE约束失败:customuser. username

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

手动设置seborn/matplotlib散点图连续变量图例中显示的值

Pandas:填充行并删除重复项,但保留不同的值

从旋转的DF查询非NaN值

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

数据框,如果值在范围内,则获取范围和

如何在PythonPandas 中对同一个浮动列进行逐行划分?

ModuleNotFoundError:Python中没有名为google的模块''

时长超过24小时如何从Excel导入时长数据

时间戳上的SOAP头签名无效

跨两个数据帧收集非索引列上的公共组