2017-03-09 214 views
0

在Python 2.7.11 &熊貓0.18.1:轉換一列從STRING一個月蟒蛇大熊貓到INT

如果我們有以下csv文件:

YEAR,MONTH,ID 
2011,JAN,1 
2011,FEB,1 
2011,MAR,1 

有什麼辦法將它讀爲熊貓數據框並將MONTH列轉換爲像這樣的字符串?

YEAR,MONTH,ID 
2011,1,1 
2011,2,1 
2011,3,1 

某些熊貓函數,如「dt.strftime('%b')」似乎不起作用。有人可以啓發嗎?

回答

3

我想最簡單和最快的方法之一是創建一個映射字典和地圖狀如下:

In [2]: df 
Out[2]: 
    YEAR MONTH ID 
0 2011 JAN 1 
1 2011 FEB 1 
2 2011 MAR 1 

In [3]: d = {'JAN':1, 'FEB':2, 'MAR':3, 'APR':4, } 

In [4]: df.MONTH = df.MONTH.map(d) 

In [5]: df 
Out[5]: 
    YEAR MONTH ID 
0 2011  1 1 
1 2011  2 1 
2 2011  3 1 

您可能需要使用df.MONTH = df.MONTH.str.upper().map(d)如果不是全部MONTH值是大寫

另一個更慢,但更可靠的方法:

In [11]: pd.to_datetime(df.MONTH, format='%b').dt.month 
Out[11]: 
0 1 
1 2 
2 3 
Name: MONTH, dtype: int64 

UPDATE:我們可以(僅使用大熊貓)自動創建的映射(thanks to @Quetzalcoatl

import calendar 

d = dict((v,k) for k,v in enumerate(calendar.month_abbr)) 

或者:

d = dict(zip(range(1,13), pd.date_range('2000-01-01', freq='M', periods=12).strftime('%b'))) 
+0

優雅答案!! – Chubaka

+0

@Chubaka,謝謝 – MaxU

+1

生成詞典: 導入日曆 字典((V,K)爲K,V在枚舉(calendar.month_abbr)) 禮節: https://stackoverflow.com/questions/3418050/month-name-to-month-number-and-versa-in-python – Quetzalcoatl