我想创建一个新列,根据另一个可以找到日期的列显示月份。
我创建了以下代码:
BusinessObjects_na_['Customer Handover Date'] = pd.to_datetime(BusinessObjects_na_['Customer Handover Date'])
BusinessObjects_na_['Month'] = BusinessObjects_na_['Customer Handover Date'].apply(lambda x: str(x).strftime('%B-%Y'))
然而,Python会出现以下错误:
AttributeError: 'str' object has no attribute 'strftime'
有人可以帮我这个吗?
答案 0 :(得分:5)
如果你正在运行最新版本的pandas,可以使用dt.strftime
:
BusinessObjects_na_['Month'] = BusinessObjects_na_['Customer Handover Date'].dt.strftime('%B-%Y')
你的代码可以在没有强制转换的情况下工作到`str:
BusinessObjects_na_['Month'] = BusinessObjects_na_['Customer Handover Date'].apply(lambda x: x.strftime('%B-%Y'))
示例:
In [276]:
df = pd.DataFrame({'date':pd.date_range(dt.datetime(2016,1,1), periods=10)})
df
Out[276]:
date
0 2016-01-01
1 2016-01-02
2 2016-01-03
3 2016-01-04
4 2016-01-05
5 2016-01-06
6 2016-01-07
7 2016-01-08
8 2016-01-09
9 2016-01-10
In [279]:
df['date'].dt.strftime('%b-%Y')
Out[279]:
0 Jan-2016
1 Jan-2016
2 Jan-2016
3 Jan-2016
4 Jan-2016
5 Jan-2016
6 Jan-2016
7 Jan-2016
8 Jan-2016
9 Jan-2016
Name: date, dtype: object
和
In [281]:
df['date'].apply(lambda x: x.strftime('%b-%Y'))
Out[281]:
0 Jan-2016
1 Jan-2016
2 Jan-2016
3 Jan-2016
4 Jan-2016
5 Jan-2016
6 Jan-2016
7 Jan-2016
8 Jan-2016
9 Jan-2016
Name: date, dtype: object