如何从字典列表创建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
相关产品推荐
相关产品推荐

