python/ pandas: конвертировать месяц int в имя месяца

большая часть информации, которую я нашел, не была в python>pandas>dataframe, следовательно, вопрос.

Я хочу преобразовать целое число от 1 до 12 В имя месяца abbrieviated.

у меня есть df, который выглядит так:

   client Month
1  sss    02
2  yyy    12
3  www    06

Я хочу, чтобы df выглядел так:

   client Month
1  sss    Feb
2  yyy    Dec
3  www    Jun

4 ответов


вы можете сделать это эффективно с совмещением calendar.month_abbr и df[col].apply()

import calendar
df['Month'] = df['Month'].apply(lambda x: calendar.month_abbr[x])

один из способов сделать это является с apply метод в фрейме данных, но для этого вам нужна карта для преобразования месяцев. Вы можете сделать это с помощью функции / словаря или с помощью собственного datetime Python.

С datetime это будет что-то вроде:

def mapper(month):
    date = datetime.datetime(2000, month, 1)  # You need a dateobject with the proper month
    return date.strftime('%b')  # %b returns the months abbreviation, other options [here][1]

df['Month'].apply(mapper)


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

months_map = {01: 'Jan', 02: 'Feb'}
def mapper(month):
    return months_map[month]


очевидно, вы не необходимо определить эти функции явно и может использовать lambda непосредственно в методе apply.


вы можете сделать это легко с помощью столбца apply.

import pandas as pd

df = pd.DataFrame({'client':['sss', 'yyy', 'www'], 'Month': ['02', '12', '06']})

look_up = {'01': 'Jan', '02': 'Feb', '03': 'Mar', '04': 'Apr', '05': 'May',
            '06': 'Jun', '07': 'Jul', '08': 'Aug', '09': 'Sep', '10': 'Oct', '11': 'Nov', '12': 'Dec'}

df['Month'] = df['Month'].apply(lambda x: look_up[x])
df

  Month client
0   Feb    sss
1   Dec    yyy
2   Jun    www

использовать strptime и