将列表列转换为二维 numpy 数组

Geo*_*Liu 5 python arrays numpy list pandas

我正在对 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
Run Code Online (Sandbox Code Playgroud)

这给出:

array([array([0, 1, 2]), array([3, 4, 5])], dtype=object)
Run Code Online (Sandbox Code Playgroud)

形状为(2,),表示内部数组不被识别。

如果我这样做s.reshape(2,-1),我就会得到(2,1)而不是(2,3)形状。

感谢任何帮助!


澄清:

以上只是一个玩具示例。我正在做的是使用 IMDB 数据集对机器学习进行预处理。我必须将评论列中的每个值转换为词嵌入(即 numpy 数组)。现在的挑战是将所有这些数组作为二维数组取出,以便我可以在我的机器学习模型中使用它们。

cs9*_*s95 7

我认为直接从列表值创建一个数组会更好。

 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)
Run Code Online (Sandbox Code Playgroud)

重要免责声明:仅当子列表都具有相同数量的元素时,这才有效。如果不是,则意味着它们是参差不齐的数组,并且 numpy 将无法使用有效的内存格式来表示数组(因此, )dtype='object'