首页 > 解决方案 > Python:随机日期生成

问题描述

我想生成与输入格式相同的随机日期,但无论我运行代码多少次,我都希望它针对每个输入值返回相同的随机日期。

我正在从 csv 文件读取数据框,如下所示:

in_df = pd.read_csv('file.txt',sep="\t", encoding='ISO-8859-1',usecols=['MY_DATE'])

输入数据框:

MY_DATE 
0   2015-11-30 
1   2016-10-14 
2   2015-11-20 

第一次调用函数后的预期输出:

MY_DATE 
0   2018-10-22 
1   2019-06-15 
2   2007-09-01 

对于相同的输入,第二次调用函数后的预期输出:

MY_DATE 
0   2018-10-22 
1   2019-06-15 
2   2007-09-01 

2015-11-30例如,2018-10-22在第一次运行时会导致结果,但在我重新运行它时不会导致相同的日期,即使在将道具设置为全局之后也是如此。

这是我的代码片段:

global prop
prop= random.random()
def gen_exp_dt(prop,start_dttm, end_dttm, format=None):
   stime = time.mktime(time.strptime(start_dttm,format))
   etime = time.mktime(time.strptime(end_dttm, format))
   rtime = stime + (prop * (etime - stime))
   return  time.strftime(format, time.localtime(rtime))

有什么建议么?

标签: pythonpython-3.x

解决方案


使用每个日期作为您的随机种子。这样,每次应用该函数时,每个日期都会得到相同的结果。

接下来,在您想要的任何范围之间生成一个随机整数(我选择了 1 和time.time()),然后转换为您想要的格式的字符串:

def random_date(seed):
    random.seed(seed)
    d = random.randint(1, int(time.time()))
    return datetime.fromtimestamp(d).strftime('%Y-%m-%d')

这将产生一致的结果:

df
      MY_DATE
0  2015-11-30
1  2016-10-14
2  2015-11-20

df.MY_DATE.apply(random_date)

0    1978-07-06
1    1971-03-30
2    1998-06-05
Name: MY_DATE, dtype: object

df.MY_DATE.apply(random_date)

0    1978-07-06
1    1971-03-30
2    1998-06-05
Name: MY_DATE, dtype: object

推荐阅读