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

如何在Polars中基于字典列表创建保留键名的Series?

解决方案

要在Polars中创建保留字典键名的struct类型Series并添加到已有DataFrame,有两种可靠实现方式:

方法1:Polars原生构造

通过pl.struct()将每个字典显式转换为带字段名的struct对象,再构造Series:

import polars as pl

data = [
    {"MA5": 91.128, "MA10": 95.559, "MA20": 103.107, "MA30": 109.3803, "MA60": 114.0822},
    {"MA5": 13.776, "MA10": 14.027, "MA20": 13.768, "MA30": 13.6417, "MA60": 14.0262}
]

# 创建保留键名的struct Series
ma_series = pl.Series("ma", [pl.struct(d) for d in data])

# 添加到已有DataFrame(假设已有DataFrame名为df)
df = df.with_columns(ma_series)

方法2:借助PyArrow构造

利用Polars与PyArrow的兼容性,先定义struct类型并转换数组,再生成Series:

import polars as pl
import pyarrow as pa

data = [
    {"MA5": 91.128, "MA10": 95.559, "MA20": 103.107, "MA30": 109.3803, "MA60": 114.0822},
    {"MA5": 13.776, "MA10": 14.027, "MA20": 13.768, "MA30": 13.6417, "MA60": 14.0262}
]

# 定义带字段名的PyArrow struct类型
struct_type = pa.struct([
    ("MA5", pa.float64()),
    ("MA10", pa.float64()),
    ("MA20", pa.float64()),
    ("MA30", pa.float64()),
    ("MA60", pa.float64())
])

# 转换为PyArrow数组并生成Polars Series
pa_array = pa.array(data, type=struct_type)
ma_series = pl.Series("ma", pa_array)

# 添加到已有DataFrame
df = df.with_columns(ma_series)

关键说明

之前丢失键名是因为直接将字典列表传入pl.Series时,Polars默认将字典转为无字段名的匿名struct。通过上述两种方式显式指定struct的字段结构,就能完整保留原字典的键名信息。

验证后输出的Series格式如下:

Series: 'ma' [struct[5]]
[
    {MA5: 91.128, MA10: 95.559, MA20: 103.107, MA30: 109.3803, MA60: 114.0822}
    {MA5: 13.776, MA10: 14.027, MA20: 13.768, MA30: 13.6417, MA60: 14.0262}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:27:29