将Pandas数据框向量化为NumPy数组

2024-03-29 11:49:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在需要将pandas数据帧转换为列表列表数组时,我遇到了一个问题。在

样品:

import pandas as pd
df = pd.DataFrame([[1,2,3],[2,2,4],[3,2,4]])

我知道有一个as_matrix()函数返回如下:

^{pr2}$

但是,我需要这种格式的东西

  [array([[1], [2], [3]]),
   array([[2], [2], [4]],
   array([[3], [2], [4]])]

例如,我需要一个数组列表,其中最里面的列表包含一个元素,数组中最外层的列表代表数据帧的行。这样做的效果是,它基本上将数据帧的每一行矢量化为一个维数为3的向量。在

这非常有用,尤其是当我需要在numpy中执行矩阵/向量操作时,而且当前我的数据源是.csv格式的,并且我正在努力寻找一种将数据帧转换为向量的方法。在

任何帮助都将不胜感激。在


Tags: 数据函数importdataframepandasdf列表as
2条回答

提取底层数组数据,沿最后一个轴添加一个新轴,然后使用np.vsplit-

np.vsplit(df.values[...,None],df.shape[0])

样本运行-

^{pr2}$

如果您正在使用NumPy funcs,那么在大多数情况下,您应该能够取消拆分并直接使用扩展数组版本。在

现在,under the hoods ^{}利用了np.array_split,这基本上是一个循环。所以,更高效的方法是避免函数开销,比如-

np.array_split(df.values[...,None],df.shape[0])

请注意,这将比预期输出中列出的维度多出一个维度。如果你想要压缩版本,我们可以在新的axis扩展数组版本上使用列表理解,比如-

In [357]: [i for i in df.values[...,None]]
Out[357]: 
[array([[1],
        [2],
        [3]]), array([[2],
        [2],
        [4]]), array([[3],
        [2],
        [4]])]

因此,另一种方法是在循环中添加新轴-

[i[...,None] for i in df.values]

首先将数据帧转换为矩阵。然后添加一个维度并将其转换为列表。在

尝试:

df = pd.DataFrame([[1,2,3],[2,2,4],[3,2,4]])
my_matrix = df.as_matrix()
my_list_of_arrays_of_list_lists = list(np.expand_dims(my_matrix, axis=2))

my_list_of_arrays_of_list_lists表示您要查找的内容,并为您提供:

^{pr2}$

相关问题 更多 >