繁体   English   中英

TypeError:“ float”对象在函数中没有属性“ __getitem__”

[英]TypeError: 'float' object has no attribute '__getitem__' in function

我试图将数据框传递给函数,并从数据框的不同列计算均值和标准差开发。 当我逐步执行函数的每一行时(无需编写函数),它可以正常工作。 但是,当我尝试编写要计算的函数时,却不断出现此错误:

TypeError: 'float' object has no attribute '__getitem__'

这是我的代码:

def computeBias(data):        

    meandata = np.array(data['mean'])
    sddata = np.array(data.sd)
    ni = np.array(data.numSamples)      

    mean = np.average(meandata, weights=ni)
    pooled_sd = np.sqrt((np.sum(np.multiply((ni - 1), np.array(sddata)**2)))/(np.sum(ni) - 1))

    return mean, pooled_sd


mean,sd = df.apply(computeBias)

这是示例数据:

id           type             mean           sd              numSamples
------------------------------------------------------------------------
1             33              -0.43          0.40               101
2             23              -0.76          0.1                100
3             33               0.89          0.56               101
4             45               1.4           0.9                100

这是完整的错误回溯:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-134-f4dc392140dd> in <module>()
----> 1 mean,sd = df.apply(computeBias)

C:\Users\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\series.pyc in apply(self, func, convert_dtype, args, **kwds)
   2353             else:
   2354                 values = self.asobject
-> 2355                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   2356 
   2357         if len(mapped) and isinstance(mapped[0], Series):

pandas\_libs\src\inference.pyx in pandas._libs.lib.map_infer (pandas\_libs\lib.c:66440)()

<ipython-input-133-2af38e3e29f0> in computeBias(data)
      1 def computeBias(data):
      2 
----> 3     meandata = np.array(data['mean'])
      4     sddata = np.array(data.sd)
      5     ni = np.array(data.numSamples)

TypeError: 'float' object has no attribute '__getitem__'

有人知道任何解决方法吗? TIA!

meandata = np.array(data['mean'])
TypeError: 'float' object has no attribute '__getitem__'

__getitem__是使用索引时Python尝试调用的方法。 在标记的行中,这意味着data['mean']正在产生错误。 显然, data是一个数字,是一个浮点对象。 您无法为数字编制索引。

data['mean']看起来像是您正在尝试使用命名索引从字典中或从数据框中获取一项。 我不会深入研究您的其余代码来确定您的意图。

您需要做些什么,才能了解真正的data以及产生的data


您正在df.apply(....)中使用它,并且显然认为这仅意味着

computeBias(df)   # or
computeBias(df.data)

相反,我怀疑apply程序在某种程度上遍历了数据框,并将值或数据序列传递给您的代码。 它没有传递整个数据框。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM