2016-06-04 2 views
4

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

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

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

client Month 
1 sss 02 
2 yyy 12 
3 www 06 

Я хочу ФР выглядеть следующим образом:

client Month 
1 sss Feb 
2 yyy Dec 
3 www Jun 

ответ

6

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

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

Вы можете легко сделать это с колонной применяются.

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 
4

Один из способов сделать это с помощью метода apply в dataframe, но, чтобы сделать это, вам нужна карта для преобразования месяцев. Вы можете либо сделать это с помощью функции/словаря, либо с помощью собственного времени и времени 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) 


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

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


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