如何从DataFrame的spikes列提取数组并去除array()外层包装?
解决方法:将numpy数组转换为原生Python列表
嘿,我刚好碰到过类似的问题!你遇到的情况是因为spikes列里的元素是numpy数组,用as_matrix提取时会保留这个数组结构。要去掉array()部分,只需要把每个numpy数组转换成Python原生列表就行,这里有两种简单的方式:
方法1:直接从DataFrame处理(推荐)
不需要先调用as_matrix,直接对spikes列的每个元素做转换,一步到位:
import cochlea import pandas as pd # 假设你已经生成了包含spikes列的df # 方式A:用列表推导式,直观高效 a = [spike_arr.tolist() for spike_arr in df['spikes']] # 方式B:用apply方法,写法更简洁 a = df['spikes'].apply(lambda x: x.tolist()).tolist()
这样得到的a就是你需要的[[1,2,3],[4,5,6]]格式。
方法2:处理已提取的矩阵
如果你已经用a = df.as_matrix(['spikes'])得到了那个嵌套结构,也可以直接对它做转换:
# 原始a的结构是[[array([1,2,3])],[array([4,5,6])]] a = [sub_list[0].tolist() for sub_list in a]
这里通过列表推导式遍历每个子列表,取出里面的numpy数组,再调用tolist()转成原生列表。
为什么tolist()管用?
numpy数组的tolist()方法会把数组转换成对应的Python原生列表,完全保留元素的顺序和数值,刚好满足你后续代码的格式要求。
内容的提问来源于stack exchange,提问作者Eli.K
相关产品推荐
相关产品推荐

