2017-07-07 60 views
0

データフレームを関数に渡し、データフレームの異なる列から平均と標準偏差を計算しようとしています。関数の各行をステップごとに(関数を書くことなく)実行すると、うまく動作します。私が計算する関数を記述しようとすると、しかし、私はこのエラーを取得しておいてください。TypeError: 'float'オブジェクトの属性が '__getitem__'でない関数

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!

+0

完全エラートレースバックで編集してください。 –

+0

@OferSadan:完了。 – Gingerbread

+0

Googleにエラーはありましたか?そのエラーを参照するhttps://stackoverflow.com/questions/25950113/float-object-has-no-attribute-getitem-python-errorの質問がかなりあります。 – gobrewers14

答えて

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

__getitem__は、インデックスを使用するときにPythonが呼び出しを試みる方法です。マークされた行には、data['mean']がエラーを生成しています。明らかにdataは浮動小数点数の数値です。番号のインデックスは作成できません。

data['mean']は、辞書からアイテムを取得しようとしているか、名前付きインデックスを使用しているデータフレームからアイテムを取得しようとしているようです。私はあなたの意図を決めるためにコードの残りの部分を掘り下げません。

何が必要なのですか?data本当にそれが何であるかを理解してください。


あなたはdf.apply(....)でこれを使用すると、どうやらそれだけではなく、私はapplyは、データフレームの上に、いくつかの次元で、反復、および値やdataseriesを通過している疑いがある

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

を意味することを考えていますあなたのコードに。データフレーム全体を通過しているわけではありません。

+0

私はそれが適用機能で何らかの問題であると考えました。私はgroupedbyオブジェクトも関数に渡したいので、applyを使用しました。しかし、それはとにかく動作しません。だから、私はグループを繰り返し、それぞれの列を送信して統計を計算しています。 – Gingerbread

関連する問題