Наличие «ValueError: не удалось преобразовать строку в float:» при использовании словаря Python

#python #numpy

#python #numpy

Вопрос:

Я пытаюсь скопировать строку в словарь, состоящий из чисел с плавающей точкой. Я попытался преобразовать значение словарей в строку перед копированием. Это не сработало. Я разбил проблему на следующий код:

 tst_dict = {}

tst_dict['name'] = np.zeros((2,3))

tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'
  

Ошибка значения: не удалось преобразовать строку в float: ‘Hase’

Спасибо за помощь.

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

1. Это <class 'numpy.ndarray'> 2×3

2. Верно, мне нужны в основном значения с плавающей точкой, и позже я решил, что было бы неплохо добавить строку по причинам именования.

3. Я добавил эти случаи в свой ответ ниже, посмотрим, поможет ли это?

Ответ №1:

Используя dtype=object , вы получаете массив ссылок на объекты python. Таким образом, вы можете использовать все варианты поведения строк python:

 import numpy as np

tst_dict = {}
tst_dict['name'] = np.zeros((2,3), dtype=object)
tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'

print(tst_dict)
  

ВЫВОД:

 {'name': array([['Hase', 0, 0],
       [0, 0, 0]], dtype=object)}
  

Редактировать:

Использование dtype='<U1' для одного char в str :

 import numpy as np

tst_dict = {}
tst_dict['name'] = np.zeros((2,3), dtype='<U1')
tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'

print(tst_dict)
  

ВЫВОД:

 {'name': array([['H', '', ''],
       ['', '', '']], dtype='<U1')}
  

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

1. Спасибо, dtype=object это было решение, которое я искал.

Ответ №2:

Ваш массив ожидает чисел. np.zeros тип данных по умолчанию — float64 . Если вы хотите иметь массив строк, укажите его при создании (либо dtype=object , либо dtype='<Ux' с x количеством символов). Больше информации о строковых массивах здесь:

 tst_dict = {}

tst_dict['name'] = np.zeros((2,3), dtype='<U10')
# if you want a string array
tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'
  

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

1. Это только поместит H , а не остальную часть str

2. Мне нужно, чтобы первое значение массива было строкой. Остальные будут с плавающей точкой в моем рабочем процессе.

3. Затем используйте dtype=object

4. Спасибо, dtype=object это было решение, которое я искал.