[英]TypeError: 'float' object has no attribute '__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.