使用Python扩展日期范围

3

问题如下:

我有一个跨越2100年到2300年的日期(大量数据),其中包括200年,例如:

raw = [
    '2100-09-01',
    '2200-03-07',
    '2295-07-27'
]

(等等1M个日期) 我需要将日期转换为1988年至2002年之间,较小(早期)且不是10的倍数的范围。

transformed = [
    '1988-09-01',
    '1998-03-08',
    '2001-08-01'
]

...以使得在原始范围的最小/平均/最大值方面,数值的分布保持不变,并且日期有效(即非闰年的2月29日无效)。

1个回答

3

尝试使用 toordinal() 函数。公元1年1月1日的序数是1。

ordinals = [d.toordinal() for d in raw]

现在您有一个数字列表,很容易进行扩展:
def scale_num(raw, target_max, target_min, source_max, source_min):
    scaled = (((raw - source_min)/(source_max - source_min))*(target_max - target_min))+target_min
    return scaled

target_min = datetime.datetime(1988,1,1).toordinal()
target_max = datetime.datetime(2001,12,31).toordinal()
source_max = max(ordinals)
source_min = min(ordinals)

scaled = [round(scale_num(d, target_max, target_min, source_max, source_min)) for d in ordinals]

要将序数转换为日期,请使用date.fromordinal()

date = date.fromordinal(1).isoformat()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接