Использование dict mapping вместо нескольких операторов if - PullRequest
0 голосов
/ 21 марта 2020

У меня есть простая функция, которая берет столбец weekday и преобразует его в фактические названия дней, например, так:

def convert_weekday(day):
    if day==0:
        return 'Mon'
    elif day==1:
        return 'Tue'
    elif day==2:
        return 'Wed'
    elif day==3:
        return 'Thu'
    elif day==4:
        return 'Fri'
    elif day==5:
        return 'Sat'
    elif day==6:
        return 'Sun'
    else:
        return day

df['day_of_week']=df['day_of_week'].apply(convert_weekday)

Это прекрасно работает, но я хотел бы сократить время выполнения, используя словарь отображается так:

dict_days = {
    0: 'Mon',
    1: 'Tue',
    2: 'Wed',
    3: 'Thu',
    4: 'Fri',
    5: 'Sat',
    6: 'Sun'
}
def map_days(day):
    func = dict_days[day]
    func()

df['day_of_week']=df['day_of_week'].apply(map_days)

Но это дает мне ошибку TypeError: 'str' object is not callable. Буду признателен за любую помощь в решении этого вопроса.

1 Ответ

3 голосов
/ 21 марта 2020

Функция map_days неверна. Он пытается вызвать (то есть ()) строку, которая хранится в словаре

На самом деле функция вам вообще не нужна, вы можете просто использовать метод dictionary.get.

dict_days = {
    0: 'Mon',
    1: 'Tue',
    2: 'Wed',
    3: 'Thu',
    4: 'Fri',
    5: 'Sat',
    6: 'Sun'
}

df['day_of_week']=df['day_of_week'].apply(dict_days.get)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...