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

为何出现‘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)

其他问题的修复说明

  1. 替换低效的while循环:直接遍历所有唯一站点编码,避免索引越界和重复判断的问题,代码更简洁高效。
  2. 修正文件名拼接:使用f-string格式化字符串,解决原代码中to_excel参数错误的问题。
  3. 替换过时方法:原代码中的iget(-1)已被弃用,改用iloc[-1],但在新逻辑中已不需要该操作。
  4. 修复匹配逻辑:原代码中ploca['EstadoCodigo'].map(est)完全不符合映射需求,改用字典查询实现站点到地区的匹配。
  5. 处理边界情况:增加未匹配到地区编码的默认值,避免报错。

内容的提问来源于stack exchange,提问作者tripster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:00:04