是否有函数判断日期属于哪一季度?
当然我可以自己写这个,但在我重新发明轮子之前,有没有已经存在的函数可以做到这一点?
18 个回答
46
我想推荐一个可能更简洁的解决方案。如果 X 是一个 datetime.datetime.now()
的实例,那么季度可以这样计算:
import math
Q=math.ceil(X.month/3.)
需要从数学模块中导入 ceil,因为它不能直接使用。
80
如果你已经在使用 pandas
这个库,那就很简单了。
import datetime as dt
import pandas as pd
quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1
如果你的数据表里有一个 date
(日期)列,你可以很轻松地创建一个新的 quarter
(季度)列:
df['quarter'] = df['date'].dt.quarter
233
给定一个 x
的实例,它是 datetime.date 类型,使用 (x.month-1)//3
可以得到季度的数字(第一季度是0,第二季度是1,依此类推。如果你想从1开始计算,就加1)。
最开始有两个答案得到了很多赞同,甚至还被接受过(现在都被删除了),但它们有问题——没有在除法前减去 -1
,而且用4来除而不是3。因为 .month
的值是从1到12的,所以你可以自己检查哪个公式是对的:
for m in range(1, 13):
print m//4 + 1,
print
这个公式的结果是 1 1 1 2 2 2 2 3 3 3 3 4
——显示了两个四个月的季度和一个单个月的季度(哎呀)。
for m in range(1, 13):
print (m-1)//3 + 1,
print
而这个公式的结果是 1 1 1 2 2 2 3 3 3 4 4 4
——你不觉得这个结果更好看吗?-)
这证明了这个问题是有必要讨论的,我觉得;-).
我认为 datetime 模块不一定要包含所有可能有用的日历功能,但我知道我自己维护了一个(经过充分测试的;-) datetools
模块,用于我和其他人在工作中的项目,它有很多小功能来执行这些日历计算——有些复杂,有些简单,但没有理由重复做这些工作(即使是简单的工作)或在这些计算中冒险出错;-).