Арифметическая операция над массивом вызывает ошибку типа: неподдерживаемые типы операндов для -: ‘str’ и ‘str’

#python #arrays #string #dtype

#python #массивы #строка #dtype

Вопрос:

У меня есть набор данных в массиве, как показано ниже.

 P=array([['984.6'],
       ['983.9'],
       ['983.2'],
       ...,
       ['7.8'],
       ['7.8'],
       ['                  ']], dtype=object)
  

Когда я выполняю какую-либо арифметическую операцию, она выдает ошибку. например, я пробовал Sub = P - P тогда

 `TypeError: unsupported operand type(s) for -: 'str' and 'str'` 
  

Пожалуйста, предложите для того же

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

1. Вы уверены, что вам нужны строки в массиве? Не фактические числовые значения?

2. Сообщение об ошибке в значительной степени говорит само за себя. В вашем массиве нет чисел. Все эти значения являются строками. '7.8' является строкой. 7.8 является числом. Они не совпадают. Вы не можете вычитать строки. Вам нужно преобразовать строки в числа, например, float('7.8') , что 7.8 равно.

3. @сушантх ValueError: could not convert string to float:

4. @TomKarzes Я пробовал И это float(n) for n in s.split()] , но не сработало

5. Вместо этого попробуйте P=array([[984.6],[983.9],...) без одинарных кавычек вокруг чисел.

Ответ №1:

Ваш массив заполнен строками вместо чисел с плавающей точкой. Это выдает ошибку, потому что вы пытаетесь выполнить арифметическую операцию над строковыми переменными.

Ответ №2:

Отображается ошибка, поскольку вы не можете вычесть две строки, сначала вам нужно ввести приведение этих строк к целому числу с использованием int (str) или float с использованием float (str)

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

1. Я пробовал с int(P) или eval(P) , но TypeError: only size-1 arrays can be converted to Python scalars

Ответ №3:

@Addy

вы не можете ввести приведение к 2-d напрямую, используя int (p), вам нужно выполнить итерацию по нему другим методом для приведения к типу всего массива является

 new_array =  P.astype(np.float)
  

надеюсь, это сработает для вас 🙂