Оператор If, ValueError: значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()

Я использую этот фрагмент кода для оператора if:

for col in df2.columns:
    a = np.array(df2[col])
    p98 = stats.scoreatpercentile(a, 98)
    p5 = stats.scoreatpercentile(a, 5)
    maxv = df2.max(axis=0)
    minv = df2.min(axis=0)
    ratiomax = maxv/p98
    print(ratiomax)
    ratiomin = minv/p5
    print(ratiomin)

    if (ratiomax <= 1.1).bool() == True:
        maxv = maxv
    else: maxv = p98

    if ratiomin <= 0.2:
        minv = minv
    else: minv = 95

Ни один из типов операторов if не работает и выдает ошибку:

ValueError: истинное значение серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()

Решения, приведенные ранее для этой ошибки, - это np.where и выбор выборочных значений из фрейма данных, но мое касается оператора if.

Пожалуйста помоги.

Спасибо


person zsh_18    schedule 16.10.2019    source источник
comment
Можете ли вы привести образцы данных для df2, np и stats?   -  person Frank    schedule 16.10.2019


Ответы (1)


Есть несколько странных фрагментов кода:

for col in df2.columns:
    a = np.array(df2[col])
    p98 = stats.scoreatpercentile(a, 98)
    p5 = stats.scoreatpercentile(a, 5)
    maxv = df2.max(axis=0)
    minv = df2.min(axis=0)
    ratiomax = maxv/p98
    print(ratiomax)
    ratiomin = minv/p5
    print(ratiomin)

    # no need for bool() conversion
    # maxv = maxv ... eles is unnecessary
    # this is the shorter version of your code:
    if not ratiomax <= 1.1:
        maxv = p98

    # same here
    if not ratiomin <= 0.2:
        minv = 95

Не проверено из-за отсутствия выборочных значений df2, np и stats

person Frank    schedule 16.10.2019