';numpy.ndarray和#x27;对象不可在Ipython控制台中调用

';numpy.ndarray和#x27;对象不可在Ipython控制台中调用,python,Python,在将excel中的数据加载到pandas dataframe后,我尝试通过简单的插值来计算cpmx、hmx、smpx、tmpx和smvx 使用cpmx=absmatdata(1,0,0,44.011100)调用函数时我看到: “numpy.ndarray”对象不可调用 你知道怎么做吗 这是我的密码: import numpy as np import pandas as pd def absmatdata(a,b,c,d,material,tmp_ref): material_map

在将excel中的数据加载到pandas dataframe后,我尝试通过简单的插值来计算cpmx、hmx、smpx、tmpx和smvx

使用
cpmx=absmatdata(1,0,0,44.011100)调用函数时
我看到:

“numpy.ndarray”对象不可调用

你知道怎么做吗

这是我的密码:

import numpy as np
import pandas as pd

def absmatdata(a,b,c,d,material,tmp_ref):
    material_map = {2.016: 'H2', 28.016: 'N2', 32.000: 'O2', 32.065: 'S',
                18.016: 'H2O', 64.065: 'SO2', 12.001: 'C Graphite', 
                28.011: 'CO', 44.011: 'CO2', 16.043: 'CH4', 30.070: 'C2H6',
                44.097: 'C3H8', 58.124: 'C4H10'}
    if material in material_map:
        df = pd.read_excel('F:\MAschinenbau\Bachelorarbeit\ABSMAT.xlsx',sheet_name=material_map[material])        
    else:
        print('No data for this material available')    
        df = [list(np.arange(0,1100,100)),list(np.arange(0,11,1)),list(np.arange(0,11,1)),list(np.arange(0,11,1)),list(np.arange(0,11,1))]
    tmp = df.values[:,0]
    cpm = df.values[:,1]
    hm = df.values[:,2]
    smp = df.values[:,3]
    smv = df.values[:,4]
    tn = np.size(df)
    tmp0 = tmp_ref
    tmpx = a
    cpmx = 0
    hmx = b
    smpx = c
    smvx = d
    if a==0 and b==0 and c==0 and d==0:
        print('All values are zero')
    elif a!=0 and b==0 and c==0 and d==0:
        print('T interpolation')
        for i in range(0,tn-1):
            if tmpx > tmp(i) and tmpx <= tmp(i+1):
                int_fak = (tmpx-tmp(i))/(tmp(i+1)-tmp(i))
                cpmx = cpm(i) + int_fak*(cpm(i+1)-cpm(i))
                hmx = hm(i) + int_fak*(hm(i+1)-hm(i))
                smpx = smp(i) + int_fak*(smp(i+1)-smp(i))
                smvx = smv(i) + int_fak*(smv(i+1)-smv(i))
    return tmpx, cpmx, hmx, smpx, smvx
将numpy导入为np
作为pd进口熊猫
def absmatdata(a、b、c、d、材料、tmp_参考):
材料图={2.016:'H2',28.016:'N2',32.000:'O2',32.065:'S',
18.016:'H2O',64.065:'SO2',12.001:'C石墨',
28.011:‘CO’,44.011:‘CO2’,16.043:‘CH4’,30.070:‘C2H6’,
44.097:'C3H8',58.124:'C4H10'}
如果材质映射中的材质:
df=pd.read\u excel('F:\MAschinenbau\bachelorabeit\ABSMAT.xlsx',工作表名称=物料图[物料])
其他:
打印('此材料无可用数据')
df=[list(np.arange(01100100)),list(np.arange(0,11,1)),list(np.arange(0,11,1)),list(np.arange(0,11,1)),list(np.arange(0,11,1))]
tmp=df.值[:,0]
cpm=df.值[:,1]
hm=df.值[:,2]
smp=df.值[:,3]
smv=df.值[:,4]
tn=np.尺寸(df)
tmp0=tmp_参考
tmpx=a
cpmx=0
hmx=b
smpx=c
smvx=d
如果a==0,b==0,c==0,d==0:
打印('所有值均为零')
艾利夫=0和b==0和c==0和d==0:
打印('T插值')
对于范围(0,tn-1)内的i:
如果tmpx>tmp(i)和tmpx
  • 您将df设置为DataFrame

  • 您可以设置tmp=df.values[:,0]

  • 你在tmp有numpy.ndarry

  • 您必须使用
    []
    获取其项目,而不是使用
    ()

你的循环部分

 if tmpx > tmp(i) and tmpx <= tmp(i+1):
                 int_fak = (tmpx-tmp(i))/(tmp(i+1)-tmp(i))
                 cpmx = cpm(i) + int_fak*(cpm(i+1)-cpm(i))
                 hmx = hm(i) + int_fak*(hm(i+1)-hm(i))
                 smpx = smp(i) + int_fak*(smp(i+1)-smp(i))
                 smvx = smv(i) + int_fak*(smv(i+1)-smv(i))

如果你有一个stacktrace,那么把它包括在你的问题中,哪一行会引起错误?能否提供F:\MAschinenbau\Bachelorabeit\ABSMAT.xlsx?或者至少是错误消息?可能您重复使用了名称“absmatdata”?错误消息正确地描述了问题。您可以编写类似于
tmp(i)
的表达式,这使python相信您希望使用参数
i
调用函数
tmp
(这是一个numpy数组)。由于numpy数组不应作为函数调用,因此会发生错误。必须使用方括号编制索引
[]
。这是Python,不是Matlab谢谢,我正在尝试编辑我的问题以添加stacktraceThank you@Ihsan Cemil Cicek,我将圆括号更改为方括号。错误现在已经消失。但是现在我有一个新的错误“索引38超出了轴0的范围,大小为38”在这行中“如果tmpx>tmp[I]并且tmpx索引38是[37],实际上你应该从[0]索引开始。你指的是[0]哪一行?我找不到解决方案。你能提供excel文件吗?Dropbox、驱动器或类似的东西。
if tmpx > tmp[i] and tmpx <= tmp[i+1]:
                int_fak = (tmpx-tmp[i])/(tmp[i+1]-tmp[i])
                cpmx = cpm[i] + int_fak*(cpm[i+1]-cpm[i])
                hmx = hm[i] + int_fak*(hm[i+1]-hm(i))
                smpx = smp[i] + int_fak*(smp[i+1]-smp[i])
                smvx = smv[i] + int_fak*(smv[i+1]-smv[i])
tn = np.size(df.values[:,0])