2017-03-09 136 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