如何在python polars中追加或连接两个 Dataframe ?

qlzsbp2j  于 2023-01-11  发布在  Python
关注(0)|答案(2)|浏览(338)

我看到可以使用series命名空间(https://stackoverflow.com/a/70599059/5363883)进行追加,我想知道是否有类似的方法来追加或连接DataFrame。
pandas中,以前可以用df1.append(df2)来实现,但是对于pd.concat([df1, df2]),该方法正在被弃用(如果它还没有被弃用的话)。
DF1
| 项目a| B|(c)秘书长的报告|
| - ------|- ------|- ------|
| 1个|第二章|三个|
DF2
| 项目a| B|(c)秘书长的报告|
| - ------|- ------|- ------|
| 四个|五个|六个|
雷斯
| 项目a| B|(c)秘书长的报告|
| - ------|- ------|- ------|
| 1个|第二章|三个|
| 四个|五个|六个|

cdmah0mi

cdmah0mi1#

根据您的需要,有不同的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)

要理解它们的区别,重要的是要理解polars内存是不可变的iff它有任何副本。
polar中的副本是自由的,因为它只增加后备内存缓冲区的引用计数,而不是复制数据本身。
但是,如果内存缓冲区还没有副本,例如refcount == 1,我们可以修改polars内存。
了解此背景后,可以使用以下方法附加数据:

  • concat-〉concatenate all given DataFrames.这是DataFrames的一个链表.如果你传递rechunk=True,所有的内存将被重新分配给连续的块.
  • vstack-〉通过增加一个引用计数将other中的数据添加到DataFrame中。这是非常便宜的。建议在许多vstacks之后调用rechunk。或者简单地使用pl.concat
  • extend此操作复制数据。它尝试将数据从其他复制到DataFrame。但是,如果DataFramerefcount大于1,则分配新的内存缓冲区以容纳两个DataFrames
vngu2lb8

vngu2lb82#

看起来.extend()变异df1以将其内存 * 扩展 * 到df2

import polars as pl

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

┌─────┬─────┬─────┐
│ a   ┆ b   ┆ c   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 2   ┆ 3   │
├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
│ 4   ┆ 5   ┆ 6   │
└─────┴─────┴─────┘

这是有道理的,但是如果我想创建一个完全不同的(在内存中也是如此)df3,我猜应该是

import polars as pl

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

df3 = pl.from_records(df1.to_numpy(), columns=["a", "b", "c"])
df3.extend(df2)

┌─────┬─────┬─────┐
│ a   ┆ b   ┆ c   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 2   ┆ 3   │
├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤
│ 4   ┆ 5   ┆ 6   │
└─────┴─────┴─────┘

对于不太冗长的方法的任何反馈都将受到欢迎。

相关问题