Используйте 2 исключения в функции python - PullRequest
0 голосов
/ 07 марта 2020

Я хочу написать функцию для расчета режима столбца в группе данных. Если значения группы не имеют режима, первое исключение: вычислить медиану, а если значения группы - все нулевые значения, второе исключение: ничего не делать. Пример кадра данных подобен приведенному ниже:

dataframe = pd.DataFrame({'b':['b1','b1','b1','b1','b1','b1','b2','b2','b2','b2','b2','b2','b3','b3','b3'],'d':[0.1,None,0.12,None,None,0.13,1,2,1,1,None,None,None,None,None]})

Функция выглядит следующим образом:

def fill_mode(group):
    try:
        group['mode'] = mode(group['d'])
    except:
        not_nulls = group[~group['d'].isnull()]
        group['mode'] = median(not_nulls['d'])
    except:
        pass
    return group 

А функция применения выглядит следующим образом:

dataframe = dataframe.groupby('b').apply(fill_mode)

Что вызывает эта ошибка:

SyntaxError: по умолчанию «кроме:» должен быть последним

Окончательный вывод должен быть таким:

enter image description here

1 Ответ

1 голос
/ 07 марта 2020

Вам нужен второй try/except блок.

def fill_mode(group):
    try:
        group['mode'] = mode(group['d'])
    except:
        try:
            not_nulls = group[~group['d'].isnull()]
            group['mode'] = median(not_nulls['d'])
        except:
            pass
    return group 
...