我有一个数据框架,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']

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

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


当前回答

如果你想要新的列分别显示年和月,你可以这样做:

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

还是……

df['year'] = df['ArrivalDate'].dt.year
df['month'] = df['ArrivalDate'].dt.month

然后你就可以把它们组合起来,或者直接使用它们。

其他回答

df['year_month']=df.datetime_column.apply(lambda x: str(x)[:7])

这对我来说工作得很好,不认为熊猫会将结果字符串日期解释为日期,但当我做图时,它非常清楚我的议程和字符串year_month的顺序…一定要爱熊猫!

假如你想要月年独一无二的一对,使用套用是相当时髦的。

df['mnth_yr'] = df['date_column'].apply(lambda x: x.strftime('%B-%Y')) 

在一列中输出月-年。

别忘了先把格式改成日期-时间之前,我一般都忘了。

df['date_column'] = pd.to_datetime(df['date_column'])

然后我试着:

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

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

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

单行:添加带有“年-月”对的列: (“pd。To_datetime '在操作之前首先将列dtype更改为date-time)

df['yyyy-mm'] = pd.to_datetime(df['ArrivalDate']).dt.strftime('%Y-%m')

因此,对于额外的“年”或“月”列:

df['yyyy'] = pd.to_datetime(df['ArrivalDate']).dt.strftime('%Y')
df['mm'] = pd.to_datetime(df['ArrivalDate']).dt.strftime('%m')

您可以先用熊猫转换日期字符串。To_datetime,它允许您访问所有numpy datetime和timedelta工具。例如:

df['ArrivalDate'] = pandas.to_datetime(df['ArrivalDate'])
df['Month'] = df['ArrivalDate'].values.astype('datetime64[M]')