将Polars DataFrame中的数组列拆分为常规列
将Polars DataFrame中的数组列拆分为常规列
嘿,我来帮你搞定这个问题!要把Polars DataFrame里的数组列拆成带自定义表头的常规列,其实有两种简单又实用的方法,我给你一步步演示:
方法1:转结构体后展开
这种方法先把数组列转换成结构体,给每个元素指定对应的字段名,再把结构体拆成单独的列,逻辑非常直观:
import polars as pl df = pl.DataFrame( { "first_last": [ ["Anne", "Adams"], ["Brandon", "Branson"], ["Camila", "Campbell"], ["Dennis", "Doyle"], ], } ) # 把数组列转成带指定字段的结构体,再展开成独立列 result_df = df.with_columns( pl.col("first_last").list.to_struct(fields=["first_name", "last_name"]) ).unnest("first_last") print(result_df)
运行后会得到这样的结果:
shape: (4, 2) ┌────────────┬───────────┐ │ first_name ┆ last_name │ │ --- ┆ --- │ │ str ┆ str │ ╞════════════╪═══════════╡ │ Anne ┆ Adams │ │ Brandon ┆ Branson │ │ Camila ┆ Campbell │ │ Dennis ┆ Doyle │ └────────────┴───────────┘
方法2:直接提取数组元素并命名列
如果你的数组长度是固定的(比如例子里每个数组都有2个元素),也可以直接提取每个位置的元素,同时给新列命名,操作更简洁:
# 提取数组第0位和第1位元素,分别命名为first_name和last_name,最后删掉原数组列 result_df = df.with_columns( first_name=pl.col("first_last").list.get(0), last_name=pl.col("first_last").list.get(1) ).drop("first_last") print(result_df)
这个方法得到的结果和上面完全一致,而且代码更直白,适合你明确知道每个数组元素对应什么字段的场景。
要是你遇到数组长度不固定的情况,可以先通过list.length()检查长度,或者用list.to_struct()时设置fill_null参数来处理缺失值,但你的例子里都是固定长度的,这两种方法都能完美解决问题~
内容来源于stack exchange
相关产品推荐
相关产品推荐

