Изменение типа данных массива pandas с obj на int

#python #pandas #dataframe #tensorflow #keras

#python #pandas #фрейм данных #тензорный поток #keras

Вопрос:

У меня есть массив в pandas dtype ‘object’, этот массив содержит только целые числа, но я не могу преобразовать его в int32 или любой другой тип данных, совместимый с Keras, из-за ошибки:

 ValueError: setting an array element with a sequence.
  

при использовании следующего кода:

 df['label'].astype('int64')
  

Это столбец:

 0        [90, 90, 100, 80, 80]
1        [90, 90, 100, 80, 80]
2      [90, 100, 100, 100, 80]
3         [70, 70, 90, 70, 70]
4        [90, 90, 100, 90, 90]
                ...           
169       [80, 80, 80, 80, 70]
170       [80, 90, 80, 80, 80]
171       [80, 90, 80, 80, 80]
172       [70, 80, 70, 70, 70]
173       [70, 80, 70, 70, 70]
Name: label, Length: 174, dtype: object
  

Как я могу преобразовать его в dtype Int?

Комментарии:

1. Столбец содержит списки в виде объектов. Вы пытаетесь преобразовать список в int, который выдаст ошибку

2. я прочитал это в документации, pandas.pydata.org/pandas-docs/stable/reference/api /…

3. Нет, вы этого не сделали. Вы не можете преобразовать столбец, содержащий списки, в целочисленный тип данных. Вся установка также указывает на проблему дизайна. Почему у вас нет отдельных столбцов для элементов в списке?

4. Весь столбец предназначен для списков, но мне нужно, чтобы они были ind списка, совместимого с tensorflow, списком целых чисел, а не строк

5. Это список целых чисел; в противном случае были бы кавычки

Ответ №1:

У вас не может быть dtype массива в pandas.

Однако есть несколько альтернатив, если ваша конечная цель — передать фрейм данных в модель keras, вы могли бы использовать что-то вроде этого:

 import pandas as pd
import numpy as np

s = pd.Series([[1,2,3]] * 5)
df = pd.DataFrame(s.to_list(), dtype='int64')
  

Это быстро и легко понять.

Тогда вы могли бы использовать

 df.to_numpy()
  

для создания правильно сформированного массива входных данных для вашей модели. Если вы используете tensorflow, вы также можете использовать tf.data module для достижения того же.

Задавайте мне любые дополнительные вопросы.
Приветствия!