2016-06-04 15 views
4

Die meisten der Informationen, die ich gefunden habe, war nicht in Python> Pandas> Dataframe daher die Frage.Python/Pandas: convert Monat Int in Monat Name

Ich möchte eine Ganzzahl zwischen 1 und 12 in einen abgekürzten Monatsnamen umwandeln.

Ich habe eine df, die wie folgt aussieht:

client Month 
1 sss 02 
2 yyy 12 
3 www 06 

ich die df wollen wie folgt aussehen:

client Month 
1 sss Feb 
2 yyy Dec 
3 www Jun 

Antwort

6

Sie können dies mit calendar.month_abbr Kombination effizient tun und df[col].apply()

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

Sie können dies mit einer Spalte leicht tun anwenden.

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

Eine Möglichkeit, dies zu tun ist mit der apply Methode in dem Datenrahmen aber, das zu tun, müssen Sie eine Karte, das die Monate konvertieren. Sie können das entweder mit einer Funktion/einem Wörterbuch oder mit Pythons eigener Datetime machen.

Mit dem Datetime es wäre so etwas wie:

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) 


In einer simillar Weise können Sie Ihre eigene Karte für benutzerdefinierte Namen bauen könnte. Es würde wie folgt aussehen:

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


Offensichtlich Sie nicht über diese Funktionen explizit definieren müssen und eine lambda direkt in der Anwendung Methode verwenden könnte.