
本教程详细介绍了如何在 polars 中高效地将存储在字典中的多个数据框按行合并为一个单一的数据框,并在此过程中自动添加一列以记录每个观测值来源于哪个原始数据框(即字典的键名)。通过结合列表推导式、`with_columns` 和 `pl.concat` 函数,我们能够优雅地解决这一常见的数据整合需求,同时保持代码的简洁性和执行效率。
在数据处理工作中,我们经常会遇到需要从多个来源(例如不同的 Excel 工作表、CSV 文件或数据库查询结果)导入数据,并将它们存储在一个字典中,其中字典的键通常代表数据的来源名称。随后,一个常见的需求是将这些独立的数据框按行合并成一个大的数据框,同时保留原始数据框的名称作为新数据框中的一列,以便追踪数据的来源。
Polars 作为一种高性能的数据框库,提供了强大的工具来处理这类任务。虽然它没有像 R Tidyverse 中 bind_rows(.id = "ID") 那样直接的单函数解决方案,但通过组合其核心功能,我们可以实现同样甚至更灵活的效果。
假设我们有一个 Polars 数据框的字典,其中每个键是数据框的名称,值是对应的 Polars 数据框。我们的目标是:
以下是一个示例数据字典:
import polars as pl
dcty = {
"df1": pl.DataFrame({'col1': [1, 2], 'col2': ["a", "b"]}),
"df2": pl.DataFrame({'col1': [3, 4], 'col2': ["c", "d"]}),
}我们期望的输出结果是一个包含所有行,并额外带有 sheet 列的单一数据框:
shape: (4, 3) ┌──────┬──────┬──────┐ │ col1 ┆ col2 ┆ sheet│ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞══════╪══════╪══════╡ │ 1 ┆ a ┆ df1 │ │ 2 ┆ b ┆ df1 │ │ 3 ┆ c ┆ df2 │ │ 4 ┆ d ┆ df2 │ └──────┴──────┴──────┘
Polars 提供了 pl.concat 函数用于合并数据框。默认情况下,pl.concat 执行垂直合并(how="vertical"),这正是我们需要的。然而,pl.concat 接收的是一个数据框列表,直接将字典的值转换为列表会丢失原始数据框的名称信息。因此,关键在于在合并之前,为每个数据框添加一个包含其名称的新列。
我们可以通过结合列表推导式、DataFrame.with_columns() 方法和 pl.lit() 函数来实现这一点。
import polars as pl
# 示例数据字典
dcty = {
"df1": pl.DataFrame({'col1': [1, 2], 'col2': ["a", "b"]}),
"df2": pl.DataFrame({'col1': [3, 4], 'col2': ["c", "d"]}),
}
# 解决方案
combined_df = pl.concat([
df.with_columns(sheet=pl.lit(name))
for name, df in dcty.items()
])
# 打印结果
print(combined_df)运行上述代码将产生预期的输出:
shape: (4, 3) ┌──────┬──────┬───────┐ │ col1 ┆ col2 ┆ sheet │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞══════╪══════╪═══════╡ │ 1 ┆ a ┆ df1 │ │ 2 ┆ b ┆ df1 │ │ 3 ┆ c ┆ df2 │ │ 4 ┆ d ┆ df2 │ └──────┴──────┴───────┘
本教程展示了在 Polars 中如何优雅地将一个数据框字典合并为一个单一的数据框,并在此过程中保留原始数据框的名称作为新列。通过利用列表推导式、DataFrame.with_columns() 和 pl.lit() 函数,我们能够构建出既简洁又高效的代码,完美解决了在数据整合场景中追踪数据来源的常见需求。掌握这种模式对于 Polars 用户来说至关重要,它能够帮助你更有效地组织和分析复杂数据集。
以上就是Polars 数据框字典合并与源信息保留教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号