模块内调用模块报错: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}")
验证方法
- 确保
AProps.csv和BProps.csv路径正确,且索引列AName、BName与你输入的A、B值匹配。 - 调用
Mod2时传入整数参数(比如Mod2(2)),按提示输入对应值,就能正常运行并输出计算结果了。
内容的提问来源于stack exchange,提问作者PyDom
相关产品推荐
相关产品推荐

