Python 如何在列中的日期范围之间生成随机日期?
我有一个看起来像这样的dfPython 如何在列中的日期范围之间生成随机日期?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个看起来像这样的df df: id dob 1 7/31/2018 2 6/1992 我想生成88799个随机日期进入数据框中的dob列,日期介于1960-01-01到1990-12-31之间,同时保持格式mm/dd/yyyy无时间戳 我该怎么做 我试过: date1 = (1960,01,01) date2 = (1990,12,31) for i range(date1,date2): df.dob = i 我会计算出您的日期范围内有多少天,然后选择该范
df:
id dob
1 7/31/2018
2 6/1992
我想生成88799个随机日期进入数据框中的dob列,日期介于1960-01-01到1990-12-31之间,同时保持格式mm/dd/yyyy无时间戳
我该怎么做
我试过:
date1 = (1960,01,01)
date2 = (1990,12,31)
for i range(date1,date2):
df.dob = i
我会计算出您的日期范围内有多少天,然后选择该范围内的88799个随机整数,最后将其作为一个带有unit='d'的timedelta添加到您的最小日期:
min_date = pd.to_datetime('1960-01-01')
max_date = pd.to_datetime('1990-12-31')
d = (max_date - min_date).days + 1
df['dob'] = min_date + pd.to_timedelta(pd.np.random.randint(d,size=88799), unit='d')
>>> df.head()
dob
0 1963-03-05
1 1973-06-07
2 1970-08-24
3 1970-05-03
4 1971-07-03
>>> df.tail()
dob
88794 1965-12-10
88795 1968-08-09
88796 1988-04-29
88797 1971-07-27
88798 1980-08-03
编辑您可以使用.strftime“%m/%d/%Y”格式化日期,但请注意,这将显著降低执行速度:
df['dob'] = (min_date + pd.to_timedelta(pd.np.random.randint(d,size=88799), unit='d')).strftime('%m/%d/%Y')
>>> df.head()
dob
0 02/26/1969
1 04/09/1963
2 08/29/1984
3 02/12/1961
4 08/02/1988
>>> df.tail()
dob
88794 02/13/1968
88795 02/05/1982
88796 07/03/1964
88797 06/11/1976
88798 11/17/1965
我会计算出您的日期范围内有多少天,然后选择该范围内的88799个随机整数,最后将其作为一个带有unit='d'的timedelta添加到您的最小日期:
min_date = pd.to_datetime('1960-01-01')
max_date = pd.to_datetime('1990-12-31')
d = (max_date - min_date).days + 1
df['dob'] = min_date + pd.to_timedelta(pd.np.random.randint(d,size=88799), unit='d')
>>> df.head()
dob
0 1963-03-05
1 1973-06-07
2 1970-08-24
3 1970-05-03
4 1971-07-03
>>> df.tail()
dob
88794 1965-12-10
88795 1968-08-09
88796 1988-04-29
88797 1971-07-27
88798 1980-08-03
编辑您可以使用.strftime“%m/%d/%Y”格式化日期,但请注意,这将显著降低执行速度:
df['dob'] = (min_date + pd.to_timedelta(pd.np.random.randint(d,size=88799), unit='d')).strftime('%m/%d/%Y')
>>> df.head()
dob
0 02/26/1969
1 04/09/1963
2 08/29/1984
3 02/12/1961
4 08/02/1988
>>> df.tail()
dob
88794 02/13/1968
88795 02/05/1982
88796 07/03/1964
88797 06/11/1976
88798 11/17/1965
可以使用strftime将日期格式化为OPasked@sacul谢谢,我如何在飞行中设置日期格式?@sacuL。我可以核对几点吗?在pd.np.random.randint行中,我们需要包含pd.np.random.randint还是只写np.random.randint?当我加入pd时,我看不出我的结果有什么不同。或者不是。同样对于d=max\u date-min\u date.days+1行,您能在这里解释一下.days的用法吗?我知道我们使用天作为时间单位,因此在代码后面使用unit='d',但是我不完全理解为什么我需要包括天。这里d只是randint的最大整数值?如果我不包含代码,代码将失败。许多的thanks@mmTmmRpd.np.random.randint就在那里,这样您就不必通过import numpy作为np显式地导入numpy,但是如果您已经导入了numpy,那么它与说np.random.randint完全相同。对于d=max_date-min_date.days+1,这只是为了得到一个有效整数的列表。days给出了最大日期-最小日期范围内天数的整数。可以使用strftime将日期格式化为OPasked@sacul谢谢,我如何在飞行中设置日期格式?@sacuL。我可以核对几点吗?在pd.np.random.randint行中,我们需要包含pd.np.random.randint还是只写np.random.randint?当我加入pd时,我看不出我的结果有什么不同。或者不是。同样对于d=max\u date-min\u date.days+1行,您能在这里解释一下.days的用法吗?我知道我们使用天作为时间单位,因此在代码后面使用unit='d',但是我不完全理解为什么我需要包括天。这里d只是randint的最大整数值?如果我不包含代码,代码将失败。许多的thanks@mmTmmRpd.np.random.randint就在那里,这样您就不必通过import numpy作为np显式地导入numpy,但是如果您已经导入了numpy,那么它与说np.random.randint完全相同。对于d=max_date-min_date.days+1,这只是为了得到一个有效整数的列表。days给出最大日期-最小日期范围内天数的整数