Python 时间序列年提取

Python 时间序列年提取,python,parsing,datetime,pandas,dataframe,Python,Parsing,Datetime,Pandas,Dataframe,我有一个包含时间戳的DF: 0 2005-08-31 16:39:40 1 2005-12-28 16:00:34 2 2005-10-21 17:52:10 3 2014-01-28 12:23:15 4 2014-01-28 12:23:15 5 2011-02-04 18:32:34 6 2011-02-04 18:32:34 7 2011-02-04 18:32:34 我想从每个时间戳中提取年份,在DF中创建额外的列,如下

我有一个包含时间戳的DF:

0     2005-08-31 16:39:40
1     2005-12-28 16:00:34
2     2005-10-21 17:52:10
3     2014-01-28 12:23:15
4     2014-01-28 12:23:15
5     2011-02-04 18:32:34
6     2011-02-04 18:32:34
7     2011-02-04 18:32:34
我想从每个时间戳中提取年份,在DF中创建额外的列,如下所示:

0     2005-08-31 16:39:40 2005
1     2005-12-28 16:00:34 2005
2     2005-10-21 17:52:10 2005
3     2014-01-28 12:23:15 2014
4     2014-01-28 12:23:15 2014
5     2011-02-04 18:32:34 2011
6     2011-02-04 18:32:34 2011
7     2011-02-04 18:32:34 2011
很明显,我可以检查所有的DF条目,去掉日期的前4个字符。这很慢。我想知道是否有一种快速的python方法可以做到这一点。 我发现可以通过DF=pd.to_datetime(DF,%Y-%m-%d%H:%m:%s)将列转换为datetime格式,但当我尝试应用datetime.datetime.year(DF)时,它不起作用。我还需要将时间戳解析为月和年-月的组合,等等。。。 请帮忙。
谢谢。

无需为每行应用函数。您可以调用一个新的访问器来访问属性:

In [35]:

df1['year'] = df1['timestamp'].dt.year
df1
Out[35]:
            timestamp  year
0 2005-08-31 16:39:40  2005
1 2005-12-28 16:00:34  2005
2 2005-10-21 17:52:10  2005
3 2014-01-28 12:23:15  2014
4 2014-01-28 12:23:15  2014
5 2011-02-04 18:32:34  2011
6 2011-02-04 18:32:34  2011
7 2011-02-04 18:32:34  2011
如果时间戳为str,则可以使用以下方法将其转换为datetime64:

您可以像上面那样使用
dt
访问月份和其他属性

对于
0.15.0
之前的版本,您可以执行以下操作:

df1['year'] = df1['timestamp'].apply(lambda x: x.year)

谢谢,@EdChum,但它不起作用,因为AttributeError:“Series”对象没有属性“year”,尽管我将原始DF转换为datetime64[ns]。。。我尝试应用DF.year,但它不起作用……不,您使用
DF['col_name'].dt.year
替换
col_name
,无论您的列名是什么,您的版本是什么?我认为datetime属性是在
0.15.0
I get AttributeError中引入的,当我使用带有附加列的原始DF时:“Series”对象没有属性“dt”,如果我定义一个新的DF1=pd.to_datetime(DF)。。也许我应该使用显式名称而不是dt缩写?:-(很抱歉,您必须将转换结果分配回或分配给新的df,因此
df=pd。只要df是一个序列类型(DF1)(或转换的df,如果您愿意),并且不幸的是,它不工作,to_datetime(df)
应该可以工作:-(将继续挖掘。。。
df1['year'] = df1['timestamp'].apply(lambda x: x.year)