2016-03-15 153 views
2

我想要一个带有时间戳列的熊猫数据框,并且只想创建一个仅包含月份的列。我想要月份列的字符串表示月份,而不是整数。我做了这样的事情:将熊猫日期时间月转换为字符串表示

df['Dates'] = pd.to_datetime(df['Dates']) 
df['Month'] = df.Dates.dt.month 
df['Month'] = df.Month.apply(lambda x: datetime.strptime(str(x), '%m').strftime('%b')) 

但是,这是一种蛮力的方法,并不是非常高性能。有没有更好的方法将月份的整数表示转换为字符串表示形式?

回答

4

使用矢量化您的日期时间dt.strftime

In [43]: 
df = pd.DataFrame({'dates':pd.date_range(dt.datetime(2016,1,1), dt.datetime(2017,2,1), freq='M')}) 
df 

Out[43]: 
     dates 
0 2016-01-31 
1 2016-02-29 
2 2016-03-31 
3 2016-04-30 
4 2016-05-31 
5 2016-06-30 
6 2016-07-31 
7 2016-08-31 
8 2016-09-30 
9 2016-10-31 
10 2016-11-30 
11 2016-12-31 
12 2017-01-31 

In [44]:  
df['month'] = df['dates'].dt.strftime('%b') 
df 

Out[44]: 
     dates month 
0 2016-01-31 Jan 
1 2016-02-29 Feb 
2 2016-03-31 Mar 
3 2016-04-30 Apr 
4 2016-05-31 May 
5 2016-06-30 Jun 
6 2016-07-31 Jul 
7 2016-08-31 Aug 
8 2016-09-30 Sep 
9 2016-10-31 Oct 
10 2016-11-30 Nov 
11 2016-12-31 Dec 
12 2017-01-31 Jan 
+0

是否有使用这种方法与我的“日期”一栏的np.datetime64格式使用'DF [“日期”]当我得到一个方式= pd.to_datetime(df ['Dates'])'? – farnold

+0

它是相同的'dtype'因此它应该工作 – EdChum

+0

当我使用这个解决方案时,我得到以下错误'AttributeError:'DatetimeProperties'对象没有属性'strftime'。任何想法? – farnold

相关问题