1

このコードは、csv ファイルをいくつかのリストに読み込む最初の試みです。以下のエラーが表示されますが、フロートが返されない理由がわかりません。ご協力いただきありがとうございます!

 File "main.py", line 32, in <module>
     LR.openfile('djia_temp.csv')  
 File "main.py", line 9, in openfile
     self.xs = self.tempDiff(dataAvgandtemp)   
 File "main.py", line 18, in tempDiff
     tdArray.append([vector[0]-vector[1]]) 
 TypeError: 'float' object has no attribute '__getitem__'

コード:

from processFile import processFile
import numpy as np

class processFile:

    @staticmethod
    def wholeFile(f):
        fileArray = []
        for line in f:
            fileArray.append(line.strip())
        return fileArray

    @staticmethod
    def liner(rows, columns, delimiter):
        vectors = []
        for row in rows:
            vector = []
            tok = row.split(delimiter)
            for num in columns:
                vectors.append(float(tok[num]))
        return vectors

class linRegmain:
    def openfile(self, file):
        f = open(file)
        a = processFile.wholeFile(f)[1:]
        dataAvgandtemp = processFile.liner(a, [2,3], ";")
        self.xs = self.tempDiff(dataAvgandtemp)
        self.ys = processFile.liner(a,[1], ";")
        print self.xs
        print self.ys


    def tempDiff(self, vectors):
        tdArray = []
        for vector in vectors:
            tdArray.append([vector[0]-vector[1]])
        return tdArray

if __name__ == '__main__':
    LR = linRegmain()
    LR.openfile('djia_temp.csv')
4

1 に答える 1

3

liner()ベクトルのリストを返すと主張しています。そうではありません。のリストを作成していますfloat:

vectors.append(float(tok[num]))

tempDiff()したがって、結果で呼び出すと、vectorは であるfloatためvector[0]、例外がスローされます。

これが本来の目的だと思います。各フロートを現在のベクターに追加し、そのベクターを結果に追加します。

@staticmethod
def liner(rows, columns, delimiter):
    vectors = []
    for row in rows:
        vector = []
        tok = row.split(delimiter)
        for num in columns:
            vector.append(float(tok[num])) # append to vector, not vectors
        vectors.append(vector)             # then append the vector to the result
    return vectors
于 2013-04-22T22:28:56.893 に答える