IndexError: слишком много индексов для массива для numpy в Python - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь вычислить среднее значение из значений, импортированных из текстового файла.После выполнения этого синтаксиса:

vragenlijst_data= np.genfromtxt('antwoorden.txt', delimiter=',', dtype=None, names=('geslacht', 'leeftijd', 'stelling1', 'doorvraag1', 'stelling2', 'stelling3', 'doorvraag3', 'opmerking'))

я получаю следующие данные:

[("['vrouw'", 43, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 
'onbeantwoord'", " '']")
 ("['vrouw'", 34, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']")
 ("['vrouw'", 32, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']")
 ("['vrouw'", 32, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']")
 ("['vrouw'", 43, " '3'", " 'sport'", " '2'", " '2'", " 'onbeantwoord'", " '']")
 ("['vrouw'", 32, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']")]
<type 'numpy.ndarray'>

Теперь я хочу вычислить среднее значение переменной возраста, но я получаю следующую ошибку, и яне удается исправить ошибку:

IndexErrorTraceback (most recent call last)
(path to file) in <module>()
10 print (vragenlijst_data)
11
---> 12 mean = np.mean(vragenlijst_data[0:,1])
13
IndexError: too many indices for array 

У кого-нибудь есть решение этой проблемы?Это было бы очень полезно!

1 Ответ

0 голосов
/ 05 июня 2018

Вы читаете ваши данные как массив кортежей строк.Это неэффективно.Я предлагаю вам использовать специализированную библиотеку для смешанных типов, например, pandas.

. Однако вы можете использовать либо списки, либо map с текущей настройкой:

A = np.array([("['vrouw'", 43, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']"),
              ("['vrouw'", 34, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']"),
              ("['vrouw'", 32, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']"),
              ("['vrouw'", 32, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']"),
              ("['vrouw'", 43, " '3'", " 'sport'", " '2'", " '2'", " 'onbeantwoord'", " '']"),
              ("['vrouw'", 32, " '2'", " 'onbeantwoord'", " '2'", " '2'", " 'onbeantwoord'", " '']")])

from operator import itemgetter

# list comprehension    
res = np.mean([int(i[1]) for i in A])  # 36.0

# functional approach
res = np.mean(list(map(int, map(itemgetter(1), A))))  # 36.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...