为何df.select获取的数组为2D类型?如何转为1D数组?
问题解答
为什么得到的是2D数组?
df.select(["A"])返回的是单列DataFrame,DataFrame本质是二维数据结构(行×列),即使只有一列,它的维度依然是(行数, 1)。当调用to_ndarray时,会保留这个二维结构,所以得到形状为(100,1)的2D数组。
转成1D数组的方法
有两种常用思路:
1. 直接从Series转换(推荐)
不用select获取DataFrame,而是用column方法获取对应列的Series(一维结构),再转成ndarray:
x = df.column("A").unwrap().to_ndarray::<Float64Type>().unwrap();
这样得到的直接就是形状为(100,)的1D数组,类型为ArrayBase<OwnedRepr<f64>, Dim<[usize; 1]>>。
2. 对已有的2D数组做维度压缩
如果已经得到了2D数组,可以用ndarray的squeeze方法去掉长度为1的维度:
let x_1d = x.squeeze().unwrap();
或者用flatten方法展平数组(适合任意二维数组转一维):
let x_1d = x.flatten().to_owned();
也可以手动指定形状重塑:
let x_1d = x.into_shape(100).unwrap();
注意手动重塑时,指定的长度必须和原数组的元素总数一致(这里100=100×1),否则会报错。
内容的提问来源于stack exchange,提问作者Arli94
相关产品推荐
相关产品推荐

