Преобразование столбца pandas dataframe типа object в массив numpy

У меня есть фреймворк pandas, содержащий идентификатор изображения, класс изображения и данные изображения:

img_train.head(5)

   ID  index  class                                               data
0  10472  10472      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
1   7655   7655      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
2   6197   6197      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
3   9741   9741      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
4   9169   9169      0  [[[255, 255, 255, 0], [255, 255, 255, 0], [255...

Я пытаюсь преобразовать каждый из этих столбцов в массив numpy:

train_img_array = np.array([])
train_id_array = np.array([])
train_lab_array = np.array([])
count = 0
for index, row in img_train.iterrows():
    imgid = row['ID']
    imgclass = row['class']
    imgdata = row['data']
    #print(imgdata)
    train_img_array = np.append(train_img_array, imgdata )
    train_lab_array = np.append(train_lab_array, imgclass )
    train_id_array = np.append(train_id_array, imgid )

Однако столбец, содержащий данные изображения и имеющий тип «объект», не переводится в соответствующую строку в массиве numpy. Например, это форма каждого массива numpy после обработки 58 строк из исходного фрейма данных:

train_img_array.shape
train_lab_array.shape
train_id_array.shape
(93615200,)
(58,)
(58,)

Как я могу это исправить?

Он возвращает что-то вроде этого: array ([array ([[[255, 255, 255, 0], [255, 255, 255, 0], [255, 255, 255, 0], ..., [255, 255, 255, 0], [255, 255, 255, 0], [255, 255, 255, 0]],

redwolf_cr7 29.05.2018 16:59

Не могли бы вы дать больше информации? Особенно полезны row['ID'].values.dtype, row['class'].values.dtype и row['data'].values.dtype.

JE_Muc 29.05.2018 17:10

@ Scotty1- Вот dtypes: ID int64 *** class int64 *** data object *** dtype: object

redwolf_cr7 29.05.2018 17:12

Спасибо, но вам следует улучшить форматирование кода, чтобы он был удобочитаемым. И дополнительная информация о формах и т. д. Также поможет.

JE_Muc 29.05.2018 17:43
img_train.values должен дать вам массивный массив, не так ли?
Sören 29.05.2018 18:08

@ Сорен: Да, это так

redwolf_cr7 29.05.2018 18:45

@ Scotty1-: я уже добавил детали, связанные с формой, в пост

redwolf_cr7 29.05.2018 18:45

Нет, не соответствующие. imgdata.shape?

JE_Muc 29.05.2018 18:49

img_train ['data']. shape дает следующее: (8020,)

redwolf_cr7 29.05.2018 18:52

Это не может быть нормально, так как в вашем вопросе вы говорите, что получившаяся форма - это (93615200,). Нет никакого способа, чтобы это умножалось на 58 или 8020. В ваших данных должны быть какие-то неправильные формы.

JE_Muc 29.05.2018 19:07

@ Scotty1-: Это проблема. Img_train - это фрейм данных pandas, который правильно хранит данные. Я пытаюсь преобразовать столбец данных фрейма данных pandas в массив numpy. Вот когда я сталкиваюсь с указанной проблемой

redwolf_cr7 29.05.2018 19:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
11
5 550
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел ответ на этот вопрос. Это довольно просто, и я просто не видел этого с самого начала. Вот как я получаю данные объекта в массиве numpy (.values ​​:))

train_img_array = np.array([])
train_id_array = np.array([])
train_lab_array = np.array([])
train_id_array = img_train['ID'].values
train_lab_array = img_train['class'].values
train_img_array =img_train['data'].values
#train_img_array = np.row_stack(img_train['data'])

Вам не нужно объявлять массивы заранее, если вы не хотите указывать размер массивов.

user988090 31.05.2018 07:26

Другие вопросы по теме