【问题标题】:TypeError: 'float' object has no attribute '__getitem__' in functionTypeError:“float”对象在函数中没有属性“__getitem__”
【发布时间】: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:我做到了。但我真的无法理解这里发生了什么。因为当我在不调用函数的情况下一步一步地做同样的事情时,它会起作用并给我一个输出。不太确定函数内部出了什么问题。

标签: python pandas numpy


【解决方案1】:
meandata = np.array(data['mean'])
TypeError: 'float' object has no attribute '__getitem__'

__getitem__ 是 Python 在您使用索引时尝试调用的方法。在标记的行中,表示data['mean'] 正在产生错误。显然data 是一个数字,一个浮点对象。你不能索引一个数字。

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

您需要做什么了解 data 的真正含义以及产生它的原因。


您在df.apply(....) 中使用它,显然认为它只是意味着

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

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

【讨论】:

  • 我认为是 apply 函数有问题。我使用 apply 是因为我想将 groupedby 对象也传递给函数。但无论如何它都不起作用。所以,我只是遍历组并通过发送相应的列来计算统计信息。
猜你喜欢
  • 1970-01-01
  • 2016-02-06
  • 2012-12-04
  • 2012-10-15
  • 2014-01-16
  • 2017-02-27
  • 2018-01-28
  • 2014-06-10
  • 2012-10-16
相关资源
最近更新 更多