熊猫数据框到2D numpy数组

时间:2019-05-06 10:00:14

标签: pandas numpy numpy-ndarray

我有以下数据框:

d = {'histogram' : [[1,2],[3,4],[5,6]]}
df = pd.DataFrame(d)

直方图的长度始终相同(在此示例中为2)。

enter image description here

,我想将“直方图”列转换为2D numpy数组以馈入神经网络。首选输出是:

output_array = np.array(d["histogram"])

即:

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

但是当我尝试:

df["histogram"].to_numpy()

结果是一个列表数组,而不是numpy个数组:

array([list([1, 2]), list([3, 4]), list([5, 6])], dtype=object)

这对于神经网络是有问题的,因为我必须指定尺寸/形状。

我尝试通过强制转换为numpy数组来解决此问题:

df["histogram_arrays"] = df["histogram"].apply(lambda x: np.array(x))
df["histogram_arrays"].to_numpy()

返回数组的一维数组,而不是二维数组。

array([array([1, 2]), array([3, 4]), array([5, 6])], dtype=object)

如何将直方图转换为2D数组?

2 个答案:

答案 0 :(得分:1)

本质上,您的问题是:如何将(大小相同)列表的NumPy数组转换为二维NumPy数组。

这使它与this SO question(几乎)重复,但是由于您的实际问题被隐藏了,无论如何,我还是在这里回答。

使用numpy.vstack

>>> data = df['histogram'].to_numpy()
>>> data
array([list([1, 2]), list([3, 4]), list([5, 6])], dtype=object)
>>> data = np.vstack(data)
>>> data.dtype, data.shape
(dtype('int64'), (3, 2))
>>> data
array([[1, 2],
       [3, 4],
       [5, 6]])

答案 1 :(得分:1)

尝试一下:

np.vstack(df['histogram'])