Skip to main content
 首页 » 编程设计

python之如何在 Pandas 列内的日期范围之间生成随机日期

2025年05月04日19insus

我有 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 

请您参考如下方法:

我会计算出您的日期范围内有多少天,然后在该范围内选择 88799 个随机整数,最后将其添加为带有 unit='d' 的时间增量到您的最短日期:

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