【问题标题】:Pandas dataframe to 2D numpy arrayPandas 数据帧到 2D numpy 数组
【发布时间】:2019-09-23 22:51:56
【问题描述】:

我有以下数据框:

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

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

我想将“直方图”列转换为 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)

如何将直方图放入二维数组?

【问题讨论】:

  • 如果您的输入不正确,您必须以某种方式进行转换。但是您是否真正体验过使用 apply 对您的数据集来说太慢了?也就是说,您是否尝试过数据集的一部分?
  • 另外:你想要一个数组数组,还是一个二维数组?您列出的最后一项不是二维数组:它是对象的一维数组(恰好是数组,但这并不意味着整个事物都是二维的数组)。
  • 你是对的,不,我需要它作为二维数组。让我编辑问题。
  • 这是否也意味着保证输入中的各个列表都具有相同的长度(例如,应该是 2)?

标签: pandas numpy numpy-ndarray


【解决方案1】:

试试这个:

np.vstack(df['histogram'])

【讨论】:

    【解决方案2】:

    您的问题本质上是:如何将(大小相同)列表的 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]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2016-06-10
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多