这似乎很基本,但一直让我头疼。我有一个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;)到列表
答案 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)