新列将日期转换为月 - 年熊猫python

时间:2016-10-28 15:24:13

标签: python datetime pandas

我想创建一个新列,根据另一个可以找到日期的列显示月份。

我创建了以下代码:

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'

有人可以帮我这个吗?

1 个答案:

答案 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