如何拼接列存在差异的Polars DataFrame 解决shape error报错
Polars列不一致数据框拼接方案
报错原因
Polars 原生pl.concat()默认执行严格的行对齐拼接,要求所有输入 DataFrame 的列集合、列顺序、列数据类型完全匹配,只要存在列数/列名差异就会抛出shape error,不会像 pandas 那样默认自动对齐补缺失值。
解决方法
调用pl.concat()时传入how="diagonal"参数,即可实现和 pandas 默认pd.concat()一致的拼接效果:自动取所有输入表的列并集,单表缺失的列自动填充null值。
示例代码:
import polars as pl # 测试样例:3个列不完全一致的DataFrame df1 = pl.DataFrame({"id": [1, 2], "name": ["a", "b"]}) df2 = pl.DataFrame({"id": [3, 4], "age": [25, 30]}) # 缺少name列,多age列 df3 = pl.DataFrame({"id": [5], "name": ["c"], "age": [28], "city": ["beijing"]}) # 多city列 # 对角线拼接,自动对齐列 df_concat = pl.concat([df1, df2, df3], how="diagonal")
拼接后的结果共包含id/name/age/city4列,各表缺失列的对应位置自动填充null。
补充说明
- 该参数仅适用于上下方向的行拼接场景,如果是左右方向的列拼接,列数不一致本身不符合逻辑,无对应兼容方案。
- 如果需要严格校验同名列的数据类型完全一致,可额外传入
strict=True,此时同名列类型不兼容时会直接抛出错误,避免隐式类型转换导致的数据异常。
内容的提问来源于stack exchange,提问作者zacko
相关产品推荐
相关产品推荐

