You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:27:41