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

如何从字典列表创建Polars DataFrame或LazyFrame?

如何从字典列表创建Polars DataFrame或LazyFrame?

嘿,我来帮你搞定这个问题!从字典列表创建Polars的DataFrame或者LazyFrame其实超级直接,就算里面藏着长度不一的数组型字段也完全不用慌,我一步步给你说清楚~

首先,先整个实际的例子,就用你提到的那种带可变长度数组的字典列表:

import polars as pl

# 模拟你的数据,每个字典里的数组字段长度不一样
sample_data = [
    {'col1': 1, 'col2': 10, 'col3': 'foo', 'colA': [1, 2, 3]},
    {'col1': 2, 'col2': 20, 'col3': 'bar', 'colA': [4, 5]},
    {'col1': 3, 'col2': 30, 'col3': 'baz', 'colA': [6]}
]

创建DataFrame

直接把这个字典列表传给pl.DataFrame()就完事了!Polars会自动帮你推断每一列的类型,哪怕是长度不一的数组,也会被识别成List类型的列,完全不用你手动处理:

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

运行之后你会看到,colA列就是可变长度的列表类型,每个行的数组长度不同也能完美兼容。

创建LazyFrame

如果你的数据量很大,或者要做复杂的多步查询,那LazyFrame会更适合——它会先优化你的查询计划再执行,效率拉满。创建方式有两种:

# 方式1:直接从字典列表创建
lf = pl.LazyFrame(sample_data)

# 方式2:先创建DataFrame再转成LazyFrame
lf_from_df = df.lazy()

注意哦,LazyFrame是延迟计算的,你得调用collect()方法才能看到实际的结果:

result = lf.collect()
print(result)

小提示:选DataFrame还是LazyFrame?

  • 要是数据量小,或者你需要实时看到计算结果,直接用DataFrame就好,简单又直观;
  • 要是数据量超大,或者有一连串复杂的过滤、聚合操作,选LazyFrame准没错,它能帮你把查询计划优化到最优,跑起来快很多。

另外,你提到有的字段是类似“字符串格式的时间戳”,比如某个数组里是时间戳字符串,想要转成时间类型的话,创建完DataFrame之后用with_columns处理就行:

data_with_timestamps = [
    {'col1': 1, 'col_time': ['2024-01-01 10:00', '2024-01-01 11:00']},
    {'col1': 2, 'col_time': ['2024-01-02 09:00']}
]

df_time = pl.DataFrame(data_with_timestamps).with_columns(
    pl.col('col_time').str.strptime(pl.Datetime, fmt='%Y-%m-%d %H:%M')
)
print(df_time)

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:17:59