Как исправить ошибку при выполнении нарезки и индексации Python? - PullRequest
2 голосов
/ 22 мая 2019

Существует CSV-файл с 463916 строками.Первый столбец - это гендерный столбец.1 мужчина, 2 женщина.Второй столбец - возраст.От 0 до 85. Третий столбец - уровень образования, но нам не нужно это поле в этой домашней работе.

Я хочу получить такой результат.

мужской женский

до 10 0,5 0,5

с10 (10 с) 0,4 0,6

с20 (20 с) 0,5 0,5

с30 (20 с) 0,5 0,5

с40 (20 с)0,5 0,5

с50 (20-е годы) 0,5 0,5

свыше 60 0,6 0,4

Я нашел популяцию для каждой возрастной группы, но в функции получения пола была ошибкасоотношение.И я не знаю, как я могу справиться с более чем 60!Но я не могу использовать панд, потому что я не научился этому ... Я новичок в Python.Пожалуйста, помогите мне !!

данные ниже

array([[ 1,  0,  1],
       [ 1,  0,  1],
       [ 1,  0,  1],
       ...,
       [ 2, 85,  6],
       [ 2, 85,  7],
       [ 2, 85,  7]], dtype=int64)


import numpy as np
data = np.loadtxt("population.csv", delimiter = ",", dtype = 'int64')

under10=s10=s20=s30=s40=s50=over60=0

def sex(age, total):
    male=female=0
    while(data[:,1]<age):
        if(data[:,0]==1):
            male+=1    
        else:
            break
    female=total-male
    print(male/total,female/total)

for i in data[:,1]:
    if (i<10):
        under10 += 1
    elif (i<20):
        s10 +=1
    elif (i<30):
        s20 +=1
    elif (i<40): 
        s30 +=1
    elif (i<50):
        s40 +=1
    elif (i<60):
        s50 +=1
    else:
        over60 +=1
sex(10, under10)
sex(20, s10)
sex(30, s20)
sex(40, s30)
sex(50, s40)
sex(60, s50)
sex(?)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-51-53c9486669b3> in <module>
     31     else:
     32         over60 +=1
---> 33 sex(10, under10)

<ipython-input-51-53c9486669b3> in sex(age, total)
      6 def sex(age, total):
      7     male=female=0
----> 8     while(data[:,1]<age):
      9         if(data[:,0]==1):
     10             male+=1

ValueError: The truth value of an array with more than one element is         ambiguous. Use a.any() or a.all()

1 Ответ

0 голосов
/ 22 мая 2019

Проблема в том, что data[:,1] дает вам весь столбец. Это нормально, но тогда ваш цикл while должен перебирать значения.

for row in data:
    # row is array([1, 0, 1])
    if row[1] < age:
        # row[1] is 0
        if row[0] == 1:
           # row[1] is 0
           male += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...