python - Pandas :仅从日期时间列中提取日历年

标签 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    

有没有人有解决这个问题的有效方法?

最佳答案

从你所说的来看,9 月似乎是 NBA 赛季年度的转折点。如果是这样,您最好的选择是应用自定义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 的地方之一。

关于python - Pandas :仅从日期时间列中提取日历年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36460886/

相关文章:

python - 在并发环境中追加到文件末尾

ios - dateFromString 产生 NIL 值 - 解决方案

javascript - 如何在字符串中的多个位置插入字符串?

python - 更快地检查 csv 中的值的方法?

python - 我可以使用日期索引在 pandas 中创建虚拟对象吗?

python - 如何重新采样时间增量?

python - 在 OpenCV 中绘制有角度的矩形

python - 在 Django 中注册时将用户添加到组

postgresql - 存储时区的合适数据类型是什么?

python - 选择在 Pandas 中有重复观察的行