添加/删除行

前文中我们提到可以使用concat拼接DataFrame, 在这里我们使用其它方法来增加或删除(去除)一些行

添加/追加

extend方法

将另外的DataFrame数据复制进当前DataFrame的底层内存中, 尝试合并到底层内存, 可能会触发内存分配, 后续查询速度会更快

TIP

extend方法不生成新对象, 方法签名有返回值只是为了方便~

1import polars as pl
2
3df = pl.DataFrame({
4	"user": ["Alice","Bob"],
5	"age": [18,19],
6})
7print(df)
8df2 = pl.DataFrame({
9	"user": ["Jack","Alex"],
10	"age": [20,21],
11})
12
13new_df = df.extend(df2)
14print(new_df)
15print(new_df is df)
1shape: (2, 2)
2┌───────┬─────┐
3│ user  ┆ age │
4│ ---   ┆ --- │
5│ str   ┆ i64 │
6╞═══════╪═════╡
7│ Alice ┆ 18  │
8│ Bob   ┆ 19  │
9└───────┴─────┘
10shape: (4, 2)
11┌───────┬─────┐
12│ user  ┆ age │
13│ ---   ┆ --- │
14│ str   ┆ i64 │
15╞═══════╪═════╡
16│ Alice ┆ 18  │
17│ Bob   ┆ 19  │
18│ Jack  ┆ 20  │
19│ Alex  ┆ 21  │
20└───────┴─────┘
21True

vstack方法

将另一个DataFrame数据附加到当前DataFrame的chunk list上, 快速追加

in_place=True原地修改不返回新对象

1import polars as pl
2
3df = pl.DataFrame({
4	"user": ["Alice","Bob"],
5	"age": [18,19],
6})
7print(df)
8df2 = pl.DataFrame({
9	"user": ["Jack","Alex"],
10	"age": [20,21],
11})
12
13new_df = df.vstack(df2,in_place=True)
14print(new_df)
15print(new_df is df)
1shape: (2, 2)
2┌───────┬─────┐
3│ user  ┆ age │
4│ ---   ┆ --- │
5│ str   ┆ i64 │
6╞═══════╪═════╡
7│ Alice ┆ 18  │
8│ Bob   ┆ 19  │
9└───────┴─────┘
10shape: (4, 2)
11┌───────┬─────┐
12│ user  ┆ age │
13│ ---   ┆ --- │
14│ str   ┆ i64 │
15╞═══════╪═════╡
16│ Alice ┆ 18  │
17│ Bob   ┆ 19  │
18│ Jack  ┆ 20  │
19│ Alex  ┆ 21  │
20└───────┴─────┘
21True

in_place=False返回一个新的DataFrame

1import polars as pl
2
3df = pl.DataFrame({
4	"user": ["Alice","Bob"],
5	"age": [18,19],
6})
7print(df)
8df2 = pl.DataFrame({
9	"user": ["Jack","Alex"],
10	"age": [20,21],
11})
12
13new_df = df.vstack(df2,in_place=False)
14print(new_df)
15print(new_df is df)
1shape: (2, 2)
2┌───────┬─────┐
3│ user  ┆ age │
4│ ---   ┆ --- │
5│ str   ┆ i64 │
6╞═══════╪═════╡
7│ Alice ┆ 18  │
8│ Bob   ┆ 19  │
9└───────┴─────┘
10shape: (4, 2)
11┌───────┬─────┐
12│ user  ┆ age │
13│ ---   ┆ --- │
14│ str   ┆ i64 │
15╞═══════╪═════╡
16│ Alice ┆ 18  │
17│ Bob   ┆ 19  │
18│ Jack  ┆ 20  │
19│ Alex  ┆ 21  │
20└───────┴─────┘
21False

删除行

Polars提供了remove方法, remove方法是filter的逆操作, 是对filter方法的包装, 参数是一个或多个表达式

1import polars as pl
2
3df = pl.DataFrame({
4	"user": ["Alice","Bob","Jack","Alex"],
5	"age": [18,19,20,21],
6})
7
8print(df.remove(pl.col("age") == 20))
9print(df.remove(
10	pl.col("age") == 20,
11	pl.col("age") == 18,
12))
13print(df.remove(
14	(pl.col("age") == 20) | (pl.col("user") == 'Alex'),
15))

下面展示通过**kargs机制传参, 注意两个条件是AND连接的

1import polars as pl
2
3df = pl.DataFrame({
4	"user": ["Alice","Bob","Jack","Alex"],
5	"age": [18,19,20,21],
6})
7
8print(df.remove(
9	user='Jack',age=20
10))
11
12print(df.remove(
13	user='Jack'
14))