为何出现‘numpy.int64’对象不可调用错误?气象数据拆分程序报错
解决气象数据Excel拆分的TypeError问题
错误原因分析
报错行estado = ploca['EstadoCodigo'].map(est)的问题在于:
pandas的Series.map()方法需要传入函数、字典或Series作为映射规则,你直接传入了一个numpy.int64类型的站点编码est,Python会尝试把这个数值当成可调用函数执行,因此触发TypeError: 'numpy.int64' object is not callable。
你的实际需求是根据Codigo(站点编码)匹配对应的EstadoCodigo,正确的做法是先把ploca转换成站点编码到地区编码的映射字典,再进行匹配。
完整修正代码
import pandas as pd # 读取原始数据 p1 = pd.read_excel("Chuvas_ba_go_df_ate_7302064.xlsx") ploca = pd.read_excel("Estacao_df_go.xlsx", usecols=['EstadoCodigo', 'Codigo']) # 构建站点编码到地区编码的映射字典 estado_map = ploca.set_index('Codigo')['EstadoCodigo'].to_dict() # 获取所有唯一的站点编码,避免重复处理 unique_estacoes = p1['EstacaoCodigo'].unique() for est in unique_estacoes: # 筛选当前站点的所有数据 ptemp = p1[p1['EstacaoCodigo'] == est].reset_index(drop=True) # 根据站点编码获取地区编码,转换为缩写 estado_codigo = estado_map.get(est) if estado_codigo == '26': # 注意ploca里的EstadoCodigo是字符串类型 estado = 'GO' elif estado_codigo == '27': estado = 'DF' else: estado = 'UNKNOWN' # 处理未匹配到的情况 # 生成文件名并保存 filename = f'estacao_{estado}_{est}.xlsx' ptemp.to_excel(filename, index=False)
其他问题的修复说明
- 替换低效的while循环:直接遍历所有唯一站点编码,避免索引越界和重复判断的问题,代码更简洁高效。
- 修正文件名拼接:使用f-string格式化字符串,解决原代码中
to_excel参数错误的问题。 - 替换过时方法:原代码中的
iget(-1)已被弃用,改用iloc[-1],但在新逻辑中已不需要该操作。 - 修复匹配逻辑:原代码中
ploca['EstadoCodigo'].map(est)完全不符合映射需求,改用字典查询实现站点到地区的匹配。 - 处理边界情况:增加未匹配到地区编码的默认值,避免报错。
内容的提问来源于stack exchange,提问作者tripster
相关产品推荐
相关产品推荐

