使用Python缩放日期范围

问题出在这里

我有一组(大型)日期,跨越2100年至2300年之间的200年,例如:

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

(例如大约100万个日期) 我需要将日期转换为1988年至2002年之间的一个较小的范围(并且更早,并且不是十的倍数),例如:

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

...使得相对于原始范围的最小值/平均值/最大值的值的原始分布得以保留,并且日期有效(即非-年的2月29日除外)。

qjp1970 回答:使用Python缩放日期范围

尝试使用toordinal()。公元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,source_min)) for d in ordinals]

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

date = date.fromordinal(1).isoformat()
本文链接:https://www.f2er.com/3126876.html

大家都在问