Python 将datetime月转换为字符串表示形式
我希望有一个带有时间戳列的数据框,并希望创建一个只有月份的列。我想让month列具有月份的字符串表示形式,而不是整数。我做过这样的事情:Python 将datetime月转换为字符串表示形式,python,pandas,python-datetime,Python,Pandas,Python Datetime,我希望有一个带有时间戳列的数据框,并希望创建一个只有月份的列。我想让month列具有月份的字符串表示形式,而不是整数。我做过这样的事情: 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')) 然而,这是一种蛮力方法,性能不太好。是
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'))
然而,这是一种蛮力方法,性能不太好。是否有更优雅的方法将月份的整数表示形式转换为字符串表示形式?在日期时间上使用矢量化:
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.23.0+
,可以使用:
当我使用
df['Dates']=pd.to_datetime(df['Dates'])时,我得到的'Dates'列的np.datetime64格式是否有办法使用这种方法?
?当我使用此解决方案时,我得到以下错误AttributeError:'DatetimeProperties'对象没有属性'strftime
。有什么想法吗?好的,好像我得到了一个更旧的pandas版本,不支持这种类型的转换。逆操作如何?@famargar您只需执行pd.to_datetime(df['month',format='%b')
这将只生成该月的默认日期时间
df['month'] = df['dates'].dt.month_name()
print (df)
dates month
0 2016-01-31 January
1 2016-02-29 February
2 2016-03-31 March
3 2016-04-30 April
4 2016-05-31 May
5 2016-06-30 June
6 2016-07-31 July
7 2016-08-31 August
8 2016-09-30 September
9 2016-10-31 October
10 2016-11-30 November
11 2016-12-31 December
12 2017-01-31 January