你的项目中有一堆数据文件,它们都遵循一致的数据模式。
你得到了一个新文件,并发现从现在开始将会有一些有用的额外列。你打算如何将这个文件与旧数据合并起来呢?
在数据处理中,合并数据集是一项常见任务。通常,合并可以分为水平合并(如 pandas
中的 merge
或 join
)和垂直合并(如 pandas
中的 concat
)。然而,在某些情况下,我们需要以一种特殊的方式合并数据,即“对角合并”或“对角拼接”,这种合并方式在 Polars 数据分析库中被称为 “diagonal concatenation”。
在上面的例子中,垂直合并(vertical concatenation)不适用,因为它不喜欢模式变化。
这时就是Polars中的对角合并(diagonal concatenation)发挥作用的时候了。
对角合并可以用 polars.concat
函数完成,但需要指定一个参数 how="diagonal"
例子如下:
# 旧模式包含年份、出口商和进口商三个字段。
dfTrades2020 = pl.DataFrame(
[
{"year":2020,"exporter":"China","importer":"USA"},
{"year":2020,"exporter":"China","importer":"USA"},
]
)
shape: (2, 3)
┌──────┬──────────┬──────────┐
│ year ┆ exporter ┆ importer │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞══════╪══════════╪══════════╡
│ 2020 ┆ China ┆ USA │
│ 2020 ┆ China ┆ USA │
└──────┴──────────┴──────────┘
# 新模式包含价值
dfTrades2021 = pl.DataFrame(
[
{"year":2021,"exporter":"China","importer":"USA","value":10},
{"year":2021,"exporter":"China","importer":"USA","value":100},
]
)
shape: (2, 4)
┌──────┬──────────┬──────────┬───────┐
│ year ┆ exporter ┆ importer ┆ value │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str ┆ i64 │
╞══════╪══════════╪══════════╪═══════╡
│ 2021 ┆ China ┆ USA ┆ 10 │
│ 2021 ┆ China ┆ USA ┆ 100 │
└──────┴──────────┴──────────┴───────┘
# 对角合并
pl.concat([dfTrades2020,dfTrades2021],how="diagonal")
对角合并会将你的新记录及其新列追加到旧记录之后,并在旧记录的新列中添加空值(null),以表示数据缺失。这是有序的。
shape: (4, 4)
┌──────┬──────────┬──────────┬───────┐
│ year ┆ exporter ┆ importer ┆ value │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str ┆ i64 │
╞══════╪══════════╪══════════╪═══════╡
│ 2020 ┆ China ┆ USA ┆ null │
│ 2020 ┆ China ┆ USA ┆ null │
│ 2021 ┆ China ┆ USA ┆ 10 │
│ 2021 ┆ China ┆ USA ┆ 100 │
└──────┴──────────┴──────────┴───────┘