我正在对 Pandas 数据框进行一些操作。对于某一列,我需要将每个单元格转换为 numpy 数组,这并不难。最终目标是获得一个二维数组作为整个列的结果。但是,当我执行以下操作时,我得到了一个一维数组,并且无法识别内部数组。
df = pd.DataFrame({'col': ['abc', 'def']})
mapping = {v: k for k, v in enumerate('abcdef')}
df['new'] = df['col'].apply(lambda x: list(x))
df['new'].apply(lambda x: np.array([mapping[i] for i in x])).values
这给出:
array([array([0, 1, 2]), array([3, 4, 5])], dtype=object)
形状为(2,),表示内部数组不被识别。
如果我执行 s.reshape(2,-1)
,我会得到 (2,1)
而不是 (2,3)
> 形状。
感谢任何帮助!
<小时/>澄清:
以上只是一个玩具示例。我正在做的是使用 IMDB 数据集对机器学习进行预处理。我必须将评论列中的每个值转换为词嵌入(即 numpy 数组)。现在的挑战是将所有这些数组作为二维数组取出,以便我可以在我的机器学习模型中使用它们。
最佳答案
我认为直接从列表值创建一个数组会更好。
df
col new
0 abc [a, b, c]
1 def [d, e, f]
arr = np.array(df['new'].tolist())
arr
# array([['a', 'b', 'c'],
# ['d', 'e', 'f']], dtype='<U1')
arr.shape
# (2, 3)
重要免责声明:仅当子列表都具有相同数量的元素时,这才有效。如果不是,则意味着它们是参差不齐的数组,并且 numpy 将无法使用有效的内存格式来表示数组(因此,dtype='object'
)。
关于python - 将列表列转换为二维 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54225293/