TypeError:只能将列表(不是“int”)连接到列表。需要帮助

时间:2018-03-27 14:36:47

标签: python python-3.x

这似乎很基本,但一直让我头疼。我有一个CSV文件和一个从lat和long字段计算UTM区域的函数。我一直收到这个错误。我不确定我做错了什么。当我将随机lat和long值传递给调用函数时,Python函数可以工作。但是当我尝试从Pandas中的CSV文件计算时,它会给出一个错误,如底部所示。

该字段有6个标题列:Date | AAA | BBB | Lat |长|距离

这是我的代码:

path2 = (r'C:\Users\newsample.csv')
openfile2 = pd.read_csv(path2, header='infer')

# Convert Long and Lat rows to list
lon = (list(openfile2['Long']))
lat = (list(openfile2['Lat']))
latitude = []
longitude = []

for la in lat:
    la = pd.to_numeric(openfile2['Lat'])
    latitude.append(la)

for lo in lon:
    lo = pd.to_numeric(openfile2['Long'])
    latitude.append(lo)

# compute UTM zone for the rows
def get_zone(lat, lon):
    zone = int((lon + 186) / 6)
    if lat >= 56.0 and lat < 64.0 and lon >= 3.0 and lon < 12.0:
        zone = 32
    if lat >= 72.0 and lat < 84.0:
        if lon >= 0.0 and lon < 9.0:
            zone = 31
        elif lon >= 9.0 and lon < 21.0:
            zone = 33
        elif lon >= 21.0 and lon < 33.0:
            zone = 35
        elif lon >= 33.0 and lon < 42.0:
            zone = 37
    if lat > 0:
        cs = "EPSG::326" + str(zone)
    else:
        cs = "EPSG::327" + str(zone)
    return cs

# Call function
newfile = get_zone(latitude, longitude)
print(newfile)

我得到 TypeError:只能连接列表(不是&#34; int&#34;)到列表

2 个答案:

答案 0 :(得分:0)

问题发生在zone = int((lon + 186) / 6)

您正在尝试将整数列表转换为单个整数。

int()接受一个参数,而不是列表。

  

插图

li1 = [1,2,3,4,5]
zone = int((li1 + 186) / 6)  
  

回溯(最近一次呼叫最后一次):文件&#34;&#34;,第1行,in    TypeError:只能连接列表(不是&#34; int&#34;)到列表

>>help(int)

...

class int(object)
 |  int(x=0) -> integer
 |  int(x, base=10) -> integer
 |  
 |  Convert a number or string to an integer, or return 0 if no arguments
 |  are given.  If x is a number, return x.__int__().  For floating point
 |  numbers, this truncates towards zero.
 |  
 |  If x is not a number or if base is given, then x must be a string,
 |  bytes, or bytearray instance representing an integer literal in the
 |  given base.  The literal can be preceded by '+' or '-' and be surrounded
 |  by whitespace.  The base defaults to 10.  Valid bases are 0 and 2-36.
 |  Base 0 means to interpret the base from the string as an integer literal.
  

更新   将两个单独的列表转换为单个元组列表

z = zip(li1,li2)
latLong = list(z)

然后在所有上运行get_zone

for x,y in latLong:
    cal_zone = get_zone(x,y)
    print(cal_zone)

答案 1 :(得分:0)

您需要将列表转换为字符串并加入,然后将结果转换为int以使zone = int((lon + 186) / 6)正常工作

numList = [1,2,3,4,5]

num = int(''.join(map(str,numList)))

print(num)

#output
>>12345

更新: 如果您需要总结列表中的所有值,请使用sum(map(float,numList))而不是int(''.join(map(str,numList))),但我觉得您想要单独访问列表中的每个项目,在这种情况下,列表理解或某些生成器将会到位。

UPDATE2:     您的列表包含带有\n个字符的字符串,因此您需要通过在附加到列表的所有项目上调用strip()函数来剥离这些字符串,然后执行下面的列表操作。

numList = ['1.2','3.4','4.5']

for item in numList:
    item = (float(item) + 187) / 6    # Do something with each item
    print(item)