Вы проверили вывод [x for x in data]
? Это просто список имен столбцов типа string. Вот почему вы получаете выше ошибки. Теперь я помогу вам решить вашу проблему, используя образец csv
файла.
Имя файла: data.csv
custID name age salary label
EMP1 Mahi 23 120000 Yes
EMP2 Tom 28 200000 No
EMP3 Chris 25 123000 No
EMP4 Matt 29 2130000 Yes
EMP5 Brown 27 324675 Yes
Как видите, файл выше содержит как строковые, так и целочисленные значения. Сначала я покажу вывод вашего кода:
data = pd.read_csv('data.csv', sep=' ')
inp = [x for x in data] # ['custID', 'name', 'age', 'salary', 'label']
inp = np.asarray(inp) # array(['custID', 'name', 'age', 'salary', 'label'], dtype='<U6')
inp = torch.from_numpy(inp)
TypeError: невозможно преобразовать np.ndarray типа numpy.str_. Единственный
Поддерживаемые типы: double, float, float16, int64, int32 и uint8
Что вы можете сделать, так это считать, что только те строковые столбцы важны для нейронных сетей и что вы можете one-hot
кодировать. Столбцы типа custID
и name
не имеют никакого значения для нейронной сети.
data = pd.read_csv('data.csv', sep=' ')
# one-hot encode of column 'label'
# Get one hot encoding of column 'label'
one_hot = pd.get_dummies(data['label'])
# Drop column 'label' as it is now encoded
data = data.drop('label',axis = 1)
# Join the encoded data
data = data.join(one_hot)
inp = [data[x] for x in data]
inp = np.asarray(inp[2:], dtype=np.float32)
inp = torch.from_numpy(inp)
* * Тысяча двадцать-одина выход:
tensor([[ 23., 28., 25., 29., 27.],
[ 120000., 200000., 123000., 2130000., 324675.],
[ 0., 1., 1., 0., 0.],
[ 1., 0., 0., 1., 1.]])
В приведенном выше коде я сначала горячим образом закодировал столбец label
, затем отбросил этот столбец и соединил закодированные данные. После этого я читаю все столбцы файла csv
(включая custID
и name
), затем игнорирую столбцы custID
и name
и преобразовываю другие в float и, наконец, использую torch.from_numpy
для преобразования его в тензор.
В приведенном выше выводе каждая строка соответствует столбцу в one-hot
закодированных данных.