如何从值长度不一致的字典创建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
相关产品推荐
相关产品推荐

