如何将Polars中嵌套list类型序列转为numpy多维数组?
如何将Polars列表类型序列转换为多维NumPy数组?
Polars的Series.to_numpy()方法仅支持原生数值类型的序列,对于List类型的序列可通过以下两种方法转换为多维NumPy数组:
方法1:转Python列表后生成NumPy数组
这是通用度最高的方法,适用于任意维度的List序列,只要所有子元素的结构维度保持一致:
二维序列示例
import polars as pl import numpy as np s = pl.Series("a", [[1,1,1],[1,2,3],[1,0,1]]) result = np.array(s.to_list()) print(result) # 输出: # array([[1, 1, 1], # [1, 2, 3], # [1, 0, 1]])
三维序列示例
s = pl.Series("a", [[[1,1],[1,2]],[[1,1],[1,1]]]) result = np.array(s.to_list()) print(result) # 输出: # array([[[1, 1], # [1, 2]], # # [[1, 1], # [1, 1]]])
方法2:使用Polars原生数组表达式arr.to_numpy()
通过Polars的arr.to_numpy()表达式可直接对List列做转换,适合嵌入DataFrame操作链中:
二维序列示例
import polars as pl import numpy as np s = pl.Series("a", [[1,1,1],[1,2,3],[1,0,1]]) result = s.to_frame().select(pl.col("a").arr.to_numpy()).to_numpy().squeeze() print(result) # 输出同上
三维序列示例
s = pl.Series("a", [[[1,1],[1,2]],[[1,1],[1,1]]]) result = s.to_frame().select(pl.col("a").arr.to_numpy()).to_numpy().squeeze() print(result) # 输出同上
说明:squeeze()用于去除转换后多余的维度,保证输出结构与预期一致。
内容的提问来源于stack exchange,提问作者J.N.
相关产品推荐
相关产品推荐

