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

Joe*_*_ft 0 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'))
Run Code Online (Sandbox Code Playgroud)

但是,Python会出现以下错误:

AttributeError: 'str' object has no attribute 'strftime'
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个吗?

EdC*_*ica 5

如果您正在运行最新版本的pandas,您可以使用dt.strftime:

BusinessObjects_na_['Month'] = BusinessObjects_na_['Customer Handover Date'].dt.strftime('%B-%Y')
Run Code Online (Sandbox Code Playgroud)

你的代码在没有强制转换的情况下工作了.

BusinessObjects_na_['Month'] = BusinessObjects_na_['Customer Handover Date'].apply(lambda x: x.strftime('%B-%Y'))
Run Code Online (Sandbox Code Playgroud)

例:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)