Наличие «ValueError: не удалось преобразовать строку в float:» при использовании словаря Python - PullRequest
1 голос
/ 14 марта 2019

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

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'

ValueError: не удалось преобразовать строку в число с плавающей точкой: 'Hase'

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

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Используя 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 голос
/ 14 марта 2019

Ваш массив ожидает числа. 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...