неподдерживаемые типы операндов для -: 'str' и 'int' в Python - PullRequest
0 голосов
/ 28 ноября 2018

Может кто-нибудь помочь мне понять, где я иду не так?

import os
import numpy as np
import pandas as pd
ctr_x = []
tl_list = []

df = pd.read_csv('ring_1_05_sam.csv')
ctr_x = df.iloc[8:12, 0:1]
ctr_y = df.iloc[8:12, 1:2]
ctr_x = (ctr_x.to_string(index=False, header=False))
ctr_y = (ctr_y.to_string(index=False, header=False))
tl_list.append((str(ctr_x - 30),str(ctr_y - 30)))

print(tl_list)

Я получаю сообщение об ошибке:

Traceback (most recent call last):
File "annotation.py", line 9, in <module>
tl_list.append((str(ctr_x - 30),str(ctr_y - 30)))
TypeError: unsupported operand type(s) for -: 'str' and 'int'

Как уже упоминалось в комментариях:

Я пытаюсь вычесть каждое значение на 30 и сохранить в tl_list[].

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Я пытаюсь вычесть каждое значение на 30 и сохранить в tl_list [].

Преобразование строк отвлекает и не нужно.Вам также не нужно явно создавать экземпляры и добавлять их в списки.Используйте pd.Series.tolist вместо:

res_x = (df.iloc[8:12, 0] - 30).tolist()
res_y = (df.iloc[8:12, 1] - 30).tolist()

res = [res_x, res_y]

Или объедините свои операции и используйте np.ndarray.tolist:

res = (df.iloc[8:12, 0:2] - 30).values.tolist()
0 голосов
/ 28 ноября 2018

Отказ от ответственности: приведенные ниже решения еще не были протестированы.

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

Вы можете сделать

ctr_x = df.iloc[8:12, 0:1] - 30   ## subtracts each element by 30
ctr_y = df.iloc[8:12, 1:2] - 30   ## ditto
ctr_x = (ctr_x.to_string(index=False, header=False))
ctr_y = (ctr_y.to_string(index=False, header=False))
tl_list.append((ctr_x, ctr_y))    ## appends [tuple of] string[s]

Старый ответ:

ctr_x = (ctr_x.to_string(index=False, header=False))

Эта строка будет ctr_x строкой, поэтому она имеет тип str.

Этот бит вызывает ошибку:

ctr_x - 30

Почему?Проще говоря, потому что вы не можете вычесть из строки (иначе вы не можете использовать минус операнд ).Вместо этого вы можете использовать

int(ctr_x) - 30

. Сначала в качестве целого числа приводится ctr_x, что , а затем позволяет использовать операнд минус.


Некоторыепримечания:

Вы объявили ctr_x = [] в верхней части вашего кода, но, похоже, не используете какие-либо функции списка с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...