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

模块内调用模块报错:TypeError: 'numpy.float64'无法被解释为整数

问题分析与解决方案

我帮你梳理下问题所在,你遇到的TypeError: 'numpy.float64' object cannot be interpreted as an integer错误,主要是代码里的拼写失误+类型不匹配导致的,咱们一步步来解决:

1. 循环变量的拼写错误(核心诱因)

看你的Mod2函数里的这段代码:

for i in range (NumLams):
    Func1(A_List[i],B_List[i],C_List[i])

这里有两个明显问题:

  • NumLams是未定义的变量!你本来应该用函数参数里的NumItems,如果NumLams是从其他地方获取的numpy.float64类型值,range()函数只接受整数参数,直接就会触发你看到的错误。
  • Func1应该是你定义的Mod1,又是一处笔误。

修复后:

for i in range(NumItems):
    Mod1(A_List[i], B_List[i], C_List[i])

2. 输入值的类型转换问题

input()函数返回的是字符串类型,你直接把C_List里的字符串传给Mod1的参数C,而Mod1里的Prop1_A、Prop1_B都是从CSV读取的numpy.float64类型,字符串和数值直接运算会引发类型错误(这是你后续必然会遇到的问题)。

修复:收集C输入时直接转成浮点数:

C_List.append(float(input('Choose the C_input for item {0}: '.format(i+1))))

如果A、B的输入也是数值类型,同理也要做转换;如果是CSV里的索引字符串,保持原样即可。

3. 代码里的其他细节笔误

  • Mod1里的Return Overall要改成小写的return Overall,Python是大小写敏感的,大写Return会被当成未定义变量。
  • Mod1里的Bs = Matrices.dropna(...)要改成Bs = Bs.dropna(...),Matrices是未定义的变量。
  • Mod1里的Prop4 = Prop1_B/(2*(1+Prop3_B)缺少右括号,补全后:
    Prop4 = Prop1_B/(2*(1+Prop3_B))
    

修复后的完整代码示例

import pandas as pd
import numpy as np

def Mod1(A, B, C):
    As = pd.read_csv('AProps.csv', index_col='AName')
    As = As.dropna(0, how='all', thresh=None, subset=None, inplace=False)
    AvailAs = As.index.tolist()
    
    Bs = pd.read_csv('BProps.csv', index_col='BName')
    Bs = Bs.dropna(0, how='all', thresh=None, subset=None, inplace=False)
    AvailBs = Bs.index.tolist()
    
    Prop1_A = As['Prop1'][A]
    Prop2_A = As['Prop2'][A]
    Prop3_A = As['Prop3'][A]
    Prop4_A = Prop1_A/(2*(1+Prop3_A))
    
    Prop1_B = Bs['Prop1'][B]
    Prop3_B = Bs['Prop3'][B]
    Prop4 = Prop1_B/(2*(1+Prop3_B))
    
    Overall = Prop1_A * C + Prop1_B * (1 - C)
    return Overall

def Mod2(NumItems):
    A_List = []
    B_List = []
    C_List = []
    for i in range(NumItems):
        A_List.append(input('Choose the A_Input for item {0}: '.format(i+1)))
        B_List.append(input('Choose the B_input for item {0}: '.format(i+1)))
        C_List.append(float(input('Choose the C_input for item {0}: '.format(i+1))))
    
    for i in range(NumItems):
        result = Mod1(A_List[i], B_List[i], C_List[i])
        print(f"Item {i+1} calculation result: {result}")

验证方法

  1. 确保AProps.csv和BProps.csv路径正确,且索引列AName、BName与你输入的A、B值匹配。
  2. 调用Mod2时传入整数参数(比如Mod2(2)),按提示输入对应值,就能正常运行并输出计算结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:21