熊猫:从日期时间列中仅提取日历年

时间:2016-04-06 19:41:24

标签: python datetime pandas timestamp time-series

我有一个Dataframe,列中包含以下列:

df['Schedule'] =
...
2012-12-31
2013-01-01
2013-01-02
2013-01-03
2013-01-04
2013-01-05
2013-01-06
2013-01-07
2013-01-08
2013-01-09

从1981年到2015年等等。该列的元素是pandas.tslib.Timestamp。

我需要创建另一个列,我只需要提取年份。

所以我做了以下命令:

df['Year'] = df['Schedule'].dt.year

部分奏效,因为我需要多年来与日历年的日期相匹配(我的数据集由NBA赛季的比赛组成)/ 要明确而不是:

2012-12-31    2012
2013-01-01    2013

我需要:

2012-12-31    2013
2013-01-01    2013
...
2013-09-27    2014
...
2014-04-06    2014    

有没有人有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

从你所说的话看,九月似乎是NBA赛季的断点。如果是这样,您最好的选择是apply自定义lambda,就像这样:

df["year"] = df["schedule"].apply (lambda x : x.year if x.month < 9 else x.year + 1)

如果你给我更多关于NBA赛季的信息,我可以清理它。

这是一个测试程序,可为您的样本提供正确的输出:

import dateutil

df = DataFrame ({
    "schedule" :
    Series ([
        "2012-12-31",
        "2013-01-01",
        "2013-09-27",
        "2014-04-06"
    ]).apply(dateutil.parser.parse)
})
df["year"] = df["schedule"].apply (lambda x : x.year if x.month < 9 else x.year + 1)
df

enter image description here

Here是pandas文档首次使用lambda apply函数开始介绍的地方之一。