从 Pandas 到 Polars 三十:将具有不同架构的数据进行合并

你的项目中有一堆数据文件,它们都遵循一致的数据模式。

你得到了一个新文件,并发现从现在开始将会有一些有用的额外列。你打算如何将这个文件与旧数据合并起来呢?

在数据处理中,合并数据集是一项常见任务。通常,合并可以分为水平合并(如 pandas 中的 mergejoin)和垂直合并(如 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   │
└──────┴──────────┴──────────┴───────┘

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 00:38:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 00:38:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 00:38:03       45 阅读
  4. Python语言-面向对象

    2024-07-23 00:38:03       55 阅读

热门阅读

  1. STL set

    2024-07-23 00:38:03       12 阅读
  2. 【Devops系统】如何构建Devops系统

    2024-07-23 00:38:03       16 阅读
  3. 面了抖音算法岗,被疯狂拷打。。。

    2024-07-23 00:38:03       19 阅读
  4. 使用 kapt 注解生成依赖注入代码

    2024-07-23 00:38:03       13 阅读
  5. Android GlSurfaceView渲染YUV图形

    2024-07-23 00:38:03       16 阅读
  6. iview中Checkbox组件设置不勾选是0,勾选是1

    2024-07-23 00:38:03       14 阅读
  7. 数学基础 -- 导数伪装的极限之变量替换

    2024-07-23 00:38:03       12 阅读
  8. 2024.7.20-22学习日报

    2024-07-23 00:38:03       10 阅读
  9. Linux-查看dd命令进度

    2024-07-23 00:38:03       15 阅读
  10. 【Android Framewrok】Handler源码解析

    2024-07-23 00:38:03       14 阅读
  11. PCI总线域与处理器域

    2024-07-23 00:38:03       13 阅读