如何将列表列表转换为具有列表[struct[n]]类型列的极坐标数据框?

问题描述 投票:0回答:2

我有一个清单。每个单独的列表可以具有不同的长度。列表的每个元素都是元组。

list1 = [("a", 1), ("b", 2)]
list2 = [("c", 3), ("d", 4), ("e", 5)]

我想将它们全部合并到一个类型为 list[struct[2]] 的单个极坐标数据帧列中。

在打印数据框时我应该看到:

    column_name

    list[struct[2]]

    [{"a",1}, {"b",2}]
    [{"c",3}, {"d",4}, {"e",5}]

我所做的就是使用下面的代码获取一列 struct[2]

    list1 = ["a", "b", "c"]
    list2 = [1, 2, 3]

    df = pl.DataFrame({
        "col1": list1,
        "col2": list2
    })

    print (df)
    dfs = df.select(pl.struct(pl.all()).alias("my_struct"))
    print(dfs)

但这离我想要实现的目标还相去甚远

dataframe list struct tuples python-polars
2个回答
0
投票

假设你希望你的钥匙是

'0', '1', ...
,你可以这样做:

pl.Series(
    [[{str(i): val for i, val in enumerate(j)} for j in lst] for lst in [list1, list2]]
)

这给了

Out[26]:
shape: (2,)
Series: '' [list[struct[2]]]
[
        [{"a",1}, {"b",2}]
        [{"c",3}, {"d",4}, {"e",5}]
]


0
投票

Polars 中的每一列都有一个架构(“类型”)。

如果我们以

{"a": 1}, {"b": 2}
为例:

df = pl.select(pl.concat_list(pl.struct(a=1), pl.struct(b=2)))
shape: (1, 1)
┌──────────────────────┐
│ a                    │
│ ---                  │
│ list[struct[2]]      │
╞══════════════════════╡
│ [{1,null}, {null,2}] │ # [{"a": 1, b: None}, {"a": None: b: 2}]
└──────────────────────┘

Polars 确定模式为:

[ {"a": int, "b": int } ]

>>> df.schema
OrderedDict([('a', List(Struct([Field('a', Int32), Field('b', Int32)])))])

这基本上意味着:列中的每个结构都必须具有字段名称。 (按键)

如果我们获取您的起始列表:

a
b
c
d
e
都是键。

list1 = [("a", 1), ("b", 2)]
list2 = [("c", 3), ("d", 4), ("e", 5)]

如果您想要所显示的结构,那么您本质上是在说您想要这个:

list1 = [{"key": "a", "value": 1}, {"key": "b", "value": 2}]
list2 = [{"key": "c", "value": 3}, {"key": "d", "value": 4}, {"key": "e", "value": 5}]

即您的起始必须成为实际的

© www.soinside.com 2019 - 2024. All rights reserved.