You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从值长度不一致的字典创建Polars DataFrame?

问题原因

Polars 创建 DataFrame 时要求所有列的长度必须一致,你的字典中B列的列表长度为6,而A、C列长度为9,因列长度不匹配抛出ShapeError。

解决方法

方法1:手动补全短列表缺失值

直接给长度较短的列表补充None(Polars会将其识别为null值),确保所有列长度一致:

import polars as pl

ex_dict = {
    'A': ['false', 'true', 'false', 'false', 'false', 'true', 'true', 'false', 'false'],
    'B': ['false', 'false', 'true', 'false', 'false', 'false'] + [None]*3,
    'C': ['false', 'true', 'true', 'false', 'false', 'false', 'false', 'false', 'true']
}

df = pl.DataFrame(ex_dict)
print(df)

方法2:自动补全缺失值

计算所有列中的最长长度,自动为短列补全null,无需手动计算需要补充的数量:

import polars as pl

ex_dict = {'A': ['false', 'true', 'false', 'false', 'false', 'true', 'true', 'false', 'false'],
           'B': ['false', 'false', 'true', 'false', 'false', 'false'],
           'C': ['false', 'true', 'true', 'false', 'false', 'false', 'false', 'false', 'true']}

max_len = max(len(v) for v in ex_dict.values())
filled_dict = {k: v + [None]*(max_len - len(v)) for k, v in ex_dict.items()}

df = pl.DataFrame(filled_dict)
print(df)

方法3:通过Series构造器拼接

先将每个列转换为Polars Series(自动补全null),再横向拼接成DataFrame:

import polars as pl

ex_dict = {'A': ['false', 'true', 'false', 'false', 'false', 'true', 'true', 'false', 'false'],
           'B': ['false', 'false', 'true', 'false', 'false', 'false'],
           'C': ['false', 'true', 'true', 'false', 'false', 'false', 'false', 'false', 'true']}

max_len = max(len(v) for v in ex_dict.values())
series_list = [pl.Series(name=k, values=v + [None]*(max_len - len(v))) for k, v in ex_dict.items()]

df = pl.concat(series_list, how='horizontal')
print(df)

内容的提问来源于stack exchange,提问作者myamulla_ciencia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:45:29