熊猫:仅从日期时间列中提取日历年
Posted
技术标签:
【中文标题】熊猫:仅从日期时间列中提取日历年【英文标题】:Pandas: Extracting just the Calendar Year from Datetime column 【发布时间】:2016-07-27 10:22:06 【问题描述】:我有一个数据框,其中有一列类似于以下列:
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
有没有人有有效的方法来解决这个问题?
【问题讨论】:
月份如何与季节对应? 我的观察(输入)都是从1981年到2015年的比赛。每个赛季的开始时间是10月左右,常规赛(季后赛前)在4月中旬结束。所以相关月份如下:09,10,11,12,01,02,03,04。希望对你有帮助 【参考方案1】:根据你的说法,9 月似乎是 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
Here 是 pandas 文档首先开始介绍使用 lambda
函数和 apply
的地方之一。
【讨论】:
为了给你更多信息,我的数据集由常规赛赛程(从 10 月到 4 月中旬)组成。您的代码听起来不错,但为什么“.apply(dateutil.parser.parse)”? 感谢接受。.apply(dateutil.parser.parse)
只是设置示例数据以使 schedule
列变为 datetime
类型,我认为这也是您原始数据集列的类型。
是的!感谢您的帮助。以上是关于熊猫:仅从日期时间列中提取日历年的主要内容,如果未能解决你的问题,请参考以下文章