Python Pandas处理CSV遇TypeError:列表无法拼接整数求助
解决Pandas调用UTM分区函数时的TypeError问题
嘿,我之前也碰到过类似的坑,咱们来一步步搞定这个问题!
首先,这个报错「TypeError: can only concatenate list (not "int") to list」的核心原因,大概率是你调用UTM函数的方式不对——单独测试时你传的是单个经纬度数值,但用Pandas处理CSV时,不小心把整列的Series传给了函数,而不是逐行传递单个的lat/long值。
先排查调用方式
举个例子,如果你之前是这么写的:
# 错误写法:直接把整列传给函数,函数收到的是Series对象,不是单个数值 df['UTM_Zone'] = get_utm_zone(df['Lat'], df['Long'])
这时候函数内部的列表拼接逻辑(比如把计算出的分区号和半球标识拼起来),就会把Series当成整数去和列表拼接,自然就报错了。
正确的做法是用df.apply()按行处理,把每行的Lat和Long作为单个数值传给函数:
# 正确写法:逐行传递单个经纬度值 df['UTM_Zone'] = df.apply(lambda row: get_utm_zone(row['Lat'], row['Long']), axis=1)
这里的axis=1表示按行遍历,lambda会把每行的Lat和Long单独取出来,和你单独测试时的输入完全一致。
再检查函数内部逻辑
如果调用方式改了还是报错,那就要看你的UTM函数内部是不是有列表和整数拼接的操作。比如函数可能是这么写的:
# 示例:函数内部返回列表,或者用列表和整数拼接 def get_utm_zone(lat, lon): zone_num = int((lon + 180) / 6) + 1 hemisphere = ['N'] if lat >=0 else ['S'] # 这里如果直接把zone_num(整数)和hemisphere(列表)拼接,就会报错! return zone_num + hemisphere
这种情况下,你应该把整数转成字符串,或者把列表改成单个字符串:
# 修改后的函数:返回字符串,避免列表拼接问题 def get_utm_zone(lat, lon): zone_num = int((lon + 180) / 6) + 1 hemisphere = 'N' if lat >=0 else 'S' return f"{zone_num}{hemisphere}" # 返回类似"30N"这样的字符串
最后验证数据类型
还有一种可能:你的CSV里Lat和Long列是字符串类型,不是数值类型!先检查一下:
print(df.dtypes)
如果显示是object类型,先转换成数值:
df['Lat'] = pd.to_numeric(df['Lat'], errors='coerce') df['Long'] = pd.to_numeric(df['Long'], errors='coerce')
避免因为类型不匹配导致函数处理出错。
按照这几步排查,应该就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者Stringz
相关产品推荐
相关产品推荐

