Pandas DataFrame для 2D-массив - PullRequest
0 голосов
/ 06 мая 2019

У меня есть следующий фрейм данных:

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

Длина гистограмм всегда одинакова (в нашем примере 2).

enter image description here

и я хотел бы преобразовать столбец «гистограмма» в двумерный массив с нюансами для подачи в нейронную сеть.Предпочтительный вывод:

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)

Как получить гистограммы в двумерном массиве?

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Попробуйте это:

np.vstack(df['histogram'])
1 голос
/ 06 мая 2019

Ваш вопрос по существу: как мне преобразовать массив NumPy (одинакового размера) списков в двумерный массив NumPy.

Это делает его (почти) дубликатом этого SO вопроса , но поскольку ваш фактический вопрос несколько скрыт, я все равно оставлю здесь ответ.

Использование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]])
...