如何在Polars中合并字典内DataFrame并保留原表名称列
在Polars中实现类似R Tidyverse
bind_rows(.id = "ID")的简洁合并方式 你可以通过列表推导式+with_columns添加表名列+pl.concat垂直合并的组合,实现和R中bind_rows(.id = "ID")几乎一样的简洁效果,不需要显式逐个处理DataFrame:
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(sheet_name)) for sheet_name, df in dcty.items()], how="vertical" ) print(combined_df)
执行后输出完全符合预期:
shape: (4, 3) ┌──────┬──────┬──────┐ │ col1 ┆ col2 ┆ sheet│ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞══════╪══════╪══════╡ │ 1 ┆ a ┆ df1 │ │ 2 ┆ b ┆ df1 │ │ 3 ┆ c ┆ df2 │ │ 4 ┆ d ┆ df2 │ └──────┴──────┴──────┘
补充说明
- 该写法遍历字典的键值对,给每个DataFrame添加一个值为工作表名称的常量列(
pl.lit用于创建常量值),再用pl.concat垂直合并所有处理后的DataFrame。 - 如果字典中不同DataFrame的列结构不一致,
pl.concat默认会自动对齐列,缺失的列会填充null,和R的bind_rows行为一致。
内容的提问来源于stack exchange,提问作者hmhensen
相关产品推荐
相关产品推荐

