-:python中的'str'和'int'不支持的操作数类型

时间:2018-11-28 17:25:05

标签: python python-3.x pandas

任何人都可以帮助我了解我要去哪里了吗?

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 :(得分:1)

  

我正在尝试将每个值减去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()

答案 1 :(得分:0)

免责声明:以下解决方案尚未经过测试。

编辑:

你可以

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

为什么?简单地说,因为您不能从字符串中减去(aka,因此您不能使用减操作数)。相反,您可以使用

int(ctr_x) - 30

这首先将ctr_x强制转换为整数,然后然后允许您使用减号。


一些旁注:

您在代码顶部附近声明了ctr_x = [],但似乎没有在其中使用任何列表功能。