Метод .append() не будет работать в моей определенной функции

Я пытаюсь определить функцию для получения процентиля, соответствующего числу с учетом распределения.

Вот как я определил функцию:

def minimum_percentile(sample, number):
    percentiles = []
    for i in range(100):
        percentile = np.percentile(sample, i)
        if percentile.any() >= number:
            percentiles.append(percentile)
        else:
            continue
    return min(percentiles)

Когда я вызываю функцию:

minimum_percentile(packages_means, 33.1388)

Ошибка, которую я получаю, связана с тем, что моя функция, похоже, не заполняет пустой список, получая это сообщение об ошибке:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-64-9923821f6175> in <module>
----> 1 minimum_percentile(packages_means, 33.1388)

<ipython-input-63-955dedc13fde> in minimum_percentile(sample, number)
      5         if percentile.any() >= number:
      6             percentiles.append(percentile)
----> 7     return min(percentiles)

ValueError: min() arg is an empty sequence

Что не так с моим кодом?


person JMarcos87    schedule 15.09.2020    source источник
comment
Вы ничего не добавили в (пустой) список percentiles, и причина, по которой вы этого не сделали, вероятно, заключается в том, что ваш percentile.any() >= number не делает то, что вы думаете.   -  person alani    schedule 15.09.2020
comment
Я добавил функцию .any(), потому что ранее получил другое сообщение об ошибке, и мне было сказано использовать либо .any(), либо .all(), я уже пробовал .all()   -  person JMarcos87    schedule 15.09.2020
comment
ValueError: max() arg - пустая последовательность имеют хорошие ответы.   -  person    schedule 15.09.2020
comment
Приложение работает нормально. Вам нужно отлаживать свой код. Именно поэтому MCVE так важен. Показывать написанную вами функцию бессмысленно, если вы не показываете, как она вызывается.   -  person Mad Physicist    schedule 15.09.2020
comment
Изменить if percentile.any() >= number: на if (percentile >= number).any():   -  person wwii    schedule 15.09.2020
comment
Основываясь на вашем ответе, я голосую за закрытие, поскольку похоже, что вы неправильно прочитали документы о том, как сортируется процентиль.   -  person Mad Physicist    schedule 15.09.2020


Ответы (2)


Мне удалось это исправить, это код, который я использовал:

def minimum_percentile(sample, number):
    percentiles = []
    for i in range(100):
        percentile = np.percentile(sample, i)
        if percentile <= number:
            percentiles.append(i)
        else:
            continue
    return max(percentiles)
person JMarcos87    schedule 15.09.2020
comment
Это бесполезно для будущих читателей, потому что мы понятия не имеем, почему это сработало или что-то в этом роде. Похоже, вы неправильно прочитали документы больше всего на свете. - person Mad Physicist; 15.09.2020

Я немного поиграл с вашим кодом, и похоже, что функция min() не работает, потому что процентили вашего списка пусты. Итак, я добавил часть, где я проверял, пуст ли список, программа должна возвращать None, и вот что я получил:

import numpy as np
def minimum_percentile(sample, number):
    percentiles = []
    for i in range(100):
        percentile = np.percentile(sample, i)
        if percentile >= number:
            percentiles.append(percentile)

        else:
            continue
    if not percentiles:
        return "None"
    else:
        return min(percentiles)
l = [1,2,3,4,5]
minimum_percentile(l, 2.5)

2.52

person Yassine Majdoub    schedule 15.09.2020