如何在 python 极坐标中附加或连接两个数据帧?

cnp*_*yer 11 python concatenation append python-polars

我发现可以使用系列名称空间进行附加(/sf/answers/4941934161/)。我想知道是否有类似的方法来附加或连接数据帧。

pandas历史上看,这可以通过df1.append(df2). 但是,该方法已被弃用(如果尚未被弃用)pd.concat([df1, df2])

df1

A C
1 2 3

df2

A C
4 5 6

资源

A C
1 2 3
4 5 6

rit*_*e46 35

append根据您的需求,有不同的策略。

df1 = pl.DataFrame({"a": [1], "b": [2], "c": [3]})
df2 = pl.DataFrame({"a": [4], "b": [5], "c": [6]})


# new memory slab
new_df = pl.concat([df1, df2], rechunk=True)

# append free (no memory copy)
new_df = df1.vstack(df2)

# try to append in place
df1.extend(df2)
Run Code Online (Sandbox Code Playgroud)

要理解差异,重要的是要了解 Polars 内存是不可变的,iff它有任何副本。

Polars 中的复制是免费的,因为它仅增加后备内存缓冲区的引用计数,而不是复制数据本身。

然而,如果内存缓冲区还没有副本,例如refcount == 1,我们可以改变极坐标内存。

了解了这个背景,就有以下几种追加数据的方法:

  • concat-> 连接所有给定的DataFrames. 这是一种 的链接列表DataFrames。如果您通过rechunk=True,所有内存将被重新分配给连续的块。
  • vstack->通过增加引用计数来添加other来自 的数据。DataFrame这是超级便宜的。建议多次后调用rechunk vstacks。或者简单地使用pl.concat.
  • extend该操作复制数据。它尝试将数据从其他复制到DataFrame. 然而,如果refcountDataFrame大于1。分配一个新的内存缓冲区来保存两者 DataFrames