python - 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))
有什么建议么?
解决方案
使用每个日期作为您的随机种子。这样,每次应用该函数时,每个日期都会得到相同的结果。
接下来,在您想要的任何范围之间生成一个随机整数(我选择了 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
推荐阅读
- jenkins - 在从节点中开始作业之前,如何在 Jenkins 中设置 Perforce SCM 的凭据 ID?
- wpf - 如何将 ARGB 值绑定到组合框项中的矩形填充属性?
- ruby-on-rails - 控制器将 current_user 电子邮件添加到 Rails 中的数据库
- java - 构造函数点 newInstance 是否使用反射?
- mysql - 如何在不更改“sql_mode=only_full_group_by”的情况下使此查询与 MySQL 5.7 兼容?
- arrays - 如何检查地图是否存在于特定位置的数组中
- javascript - 输入类型号为运算符(+,-)上的事件输入返回 null
- r - 按最大日期划分的重复值的子集数据框
- database - 第一次在 python 中对大型 SQLite DB 执行查询需要很长时间
- swift - Couchbase 接收 Channel null