【发布时间】:2017-07-08 04:11:42
【问题描述】:
我正在尝试将数据帧传递给函数并从数据帧的不同列计算均值和标准差。当我逐步执行函数的每一行(不编写这样的函数)时,它工作正常。但是,当我尝试编写一个计算函数时,我不断收到此错误:
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__'
有人知道任何解决方法吗?蒂亚!
【问题讨论】:
-
请在完整的错误回溯中编辑
-
@OferSadan:完成。
-
你用谷歌搜索了错误吗?有很多 stackoverflow.com/questions/25950113/… 问题引用了该错误。
-
您希望
data出现在这里?从错误消息来看,它似乎是float类型。确保您使用__getitem__方法传入字典或其他类型。 -
@gobrewers14:我做到了。但我真的无法理解这里发生了什么。因为当我在不调用函数的情况下一步一步地做同样的事情时,它会起作用并给我一个输出。不太确定函数内部出了什么问题。