Преобразование вывода списка в Python

У меня есть функция, которая работает следующим образом, чтобы прочитать файл.csv и сохранить его в массиве.

def read_csv(self, filename, delimiter = ',', quotechar = '"'):
    reader = csv.reader(open(filename, 'rb'), delimiter = delimiter, quotechar = quotechar)
    # read first line and extract its data 
    self.column_headings = np.array(next(reader))
    # read subsequent lines
    rows = []
    for row in reader:
        rows.append(row)
    self.data = np.array(rows)
    self.m, self.n = self.data.shape

Я просто пытаюсь прочитать файл.tsv, чтобы он вернулся в той же форме. У меня есть это до сих пор:

traindata = np.array(p.read_table('train.tsv'))[:,2]

Тем не менее, когда я пытаюсь позвонить:

m, n = traindata.data.shape

# Display
print m, n, traindata.column_headings

Я получаю ошибку:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-14-1f877ccb37b5> in <module>()
----> 1 m, n = traindata.data.shape

AttributeError: 'buffer' object has no attribute 'shape'

Что вызывает эту проблему и как я могу это исправить?

1 ответ

Решение

Вы явно создаете list из traindata:

traindata = list(np.array(p.read_table('train.tsv'))[:,2])
          # ^ here

Если вы хотите использовать его как numpy.array, удалить list() вызов:

traindata = np.array(p.read_table('train.tsv'))[:,2]

Во-вторых, вы хотите shape из arrayне его data:

m, n = traindata.shape
Другие вопросы по тегам