我有一个数据框架,df,有以下列:

df['ArrivalDate'] =
...
936   2012-12-31
938   2012-12-29
965   2012-12-31
966   2012-12-31
967   2012-12-31
968   2012-12-31
969   2012-12-31
970   2012-12-29
971   2012-12-31
972   2012-12-29
973   2012-12-29
...

列的元素是pandas. tslip . timestamp。

我想只包括年份和月份。我以为会有简单的方法,但我想不出来。

以下是我的尝试:

df['ArrivalDate'].resample('M', how = 'mean')

我得到了以下错误:

Only valid with DatetimeIndex or PeriodIndex 

然后我试着:

df['ArrivalDate'].apply(lambda(x):x[:-2])

我得到了以下错误:

'Timestamp' object has no attribute '__getitem__' 

有什么建议吗?

编辑:我有点明白了。

df.index = df['ArrivalDate']

然后,我可以使用索引重新采样另一列。

但是我仍然想要一个重新配置整个列的方法。什么好主意吗?


当前回答

在不使用apply方法的情况下,有两个步骤来提取所有数据帧的年份。

Step1

将列转换为datetime:

df['ArrivalDate']=pd.to_datetime(df['ArrivalDate'], format='%Y-%m-%d')

步骤2

使用DatetimeIndex()方法提取年份或月份

 pd.DatetimeIndex(df['ArrivalDate']).year

其他回答

df['Month_Year'] = df['Date'].dt.to_period('M')

结果:

    Date            Month_Year
0   2020-01-01      2020-01
1   2020-01-02      2020-01
2   2020-01-03      2020-01
3   2020-01-04      2020-01
4   2020-01-05      2020-01

提取年份say from ['2018-03-04']

df['Year'] = pd.DatetimeIndex(df['date']).year  

df['Year']创建一个新列。而如果你想提取月份,只需使用.month

然后我试着:

df['ArrivalDate'].apply(lambda(x):x[:-2])

我认为这里正确的输入应该是字符串。

df['ArrivalDate'].astype(str).apply(lambda(x):x[:-2])

感谢jaknap32,我想根据年和月聚合结果,所以这是有效的:

df_join['YearMonth'] = df_join['timestamp'].apply(lambda x:x.strftime('%Y%m'))

输出很简洁:

0    201108
1    201108
2    201108

在不使用apply方法的情况下,有两个步骤来提取所有数据帧的年份。

Step1

将列转换为datetime:

df['ArrivalDate']=pd.to_datetime(df['ArrivalDate'], format='%Y-%m-%d')

步骤2

使用DatetimeIndex()方法提取年份或月份

 pd.DatetimeIndex(df['ArrivalDate']).year