有没有一种简单的方法可以从Python的字符串中减去四分之一(3个月)?

时间:2019-09-02 20:01:52

标签: python string pandas

我试图从输入的字符串中减去四分之一,其格式类似于“ 2002q2”,这意味着year = 2002年第2季度。

我试图定义一个函数来完成这项工作

def subtract_quarter(s):
    y,q = map(int,tuple(s.split('q')))
    if q>1:
        q = q-1
    else:
        q=4
        y=y-1
    return 'q'.join([str(y),str(q)])
subtract_quarter('2000q1')

输出: '1999q4'

但是有没有更简单的方法或pythonic方法呢?

1 个答案:

答案 0 :(得分:2)

我们绝对可以使它更紧凑,并与三角洲三角洲合作:

def add_quarters(s, dq):
    y,q = map(int,tuple(s.split('q')))
    yq2 = 4*y + q + dq
    return '{}q{}'.format(yq2//4, yq2%4)

例如:

>>> add_quarters('2000q4', 1)
'2001q1'
>>> add_quarters('2000q4', 15)
'2004q3'
>>> add_quarters('2000q4', -1)
'2000q3'
>>> add_quarters('2000q4', -5)
'1999q3'

因此,我们在这里可以加/减任意数量的季度。通过使用-1,我们减去一个四分之一。

话虽这么说,但我不确定首先使用字符串是否是个好主意。最好使用代表季度数的整数(例如,自2000年1月1日以来)或使用date对象。通过使用字符串,您可以使其更容易出错,因为例如字符串可以包含'foo-bar'。通过使用整数,至少值的“格式”不会错误。