Фрейм данных с одним столбцом, содержащий одномерные списки с использованием двумерного массива numpy - PullRequest
4 голосов
/ 28 мая 2020

Я хочу создать новый фрейм данных pandas с одним столбцом, используя массив 2D numpy. Очевидно, каждая строка должна содержать одномерные списки. Ниже приведен упрощенный воспроизводимый пример.

import pandas as pd
import numpy as np

arr = np.ones((4,3)) # could be any 2D array

Я хочу,

       lists
0  [1, 1, 1]
1  [1, 1, 1]
2  [1, 1, 1]
3  [1, 1, 1]

Теперь df = pd.DataFrame(arr, columns=['lists']) дает ошибку,

ValueError: Shape of passed values is (4, 3), indices imply (4, 1)

И df = pd.DataFrame(list(arr), columns=['lists']) дает ошибку,

ValueError: 1 columns passed, passed data had 3 columns

Наконец, df = pd.DataFrame(arr.flatten(), columns=['lists']) дает неправильный фрейм данных со всеми ячейками, имеющими скаляр 1.

Как мне получить то, что я хочу?

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Получить все строки массива, создать с ними фрейм данных. Транспонируйте и добавьте имя столбца.

import pandas as pd
import numpy as np

# ones array
arr = np.ones((4,3), dtype=int)

# get all rows of the array transpose and add column name
df  = pd.DataFrame([list(arr)]).T
df.columns = ['lists']
df
2 голосов
/ 28 мая 2020
data = {"lists": list(arr)}

df = pd.DataFrame(data, columns=['lists'])

print(df)

Вывод:

             lists
0  [1.0, 1.0, 1.0]
1  [1.0, 1.0, 1.0]
2  [1.0, 1.0, 1.0]
3  [1.0, 1.0, 1.0]
2 голосов
/ 28 мая 2020

Из каждой строки 2-го массива (т. Е. 1-го массива) создайте одноэлементный кортеж, содержащий эту строку, и создайте DataFrame из этого . Мы можем элегантно сделать это, используя выражение генератора:

>>> df = pd.DataFrame(((x,) for x in arr), columns=['lists'])
>>> df
             lists
0  [1.0, 1.0, 1.0]
1  [1.0, 1.0, 1.0]
2  [1.0, 1.0, 1.0]
3  [1.0, 1.0, 1.0]

Конструктор выполняет итерацию по кортежу, а не по базовому массиву, чтобы определить значения столбцов в данной строке. Существует одно такое значение - 1d-массив, поэтому оно сохраняется для этой строки в единственном доступном столбце.

Значения ячеек действительно Numpy массивы:

>>> df['lists'][0]
array([1., 1., 1.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...