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. 然而,如果refcount的DataFrame大于1。分配一个新的内存缓冲区来保存两者 DataFrames。| 归档时间: |
|
| 查看次数: |
17941 次 |
| 最近记录: |