python-3.x 根据大小在两个日期之间生成多个随机日期时间戳

yv5phkfx  于 2022-12-30  发布在  Python
关注(0)|答案(2)|浏览(141)

我试图在两个日期之间生成多个随机日期时间戳,
我尝试使用基于existing postquestion的以下代码,但它只生成一个随机日期时间。

import datetime
import random
import pandas as pd

min_date = pd.to_datetime('2019-01-01 00:00:00')
max_date = pd.to_datetime('2019-01-01 23:59:59')

start + datetime.timedelta(seconds=random.randint(0, int((end - start).total_seconds())),)

>>> Timestamp('2019-09-27 05:58:40')

有没有一种方法可以根据提到的大小生成多个日期时间。假设大小是100,它应该生成100个随机的日期时间戳对象,类似于上面提到的输出。另外,我想将100个时间戳存储在一个Pandas Dataframe 中。

mwg9r5ms

mwg9r5ms1#

试试这个:

import datetime
import random
import pandas as pd

min_date = pd.to_datetime('2019-01-01 00:00:00')
max_date = pd.to_datetime('2019-01-01 23:59:59')
for x in range(100):
    print(start + datetime.timedelta(seconds=random.randint(0, int((end - start).total_seconds())),))

它将生成100个随机时间戳

omhiaaxx

omhiaaxx2#

N       = 100
diff    = (max_date - min_date).total_seconds() + 1
offsets = random.sample(range(int(diff)), k=N)
result  = min_date + pd.TimedeltaIndex(offsets, unit="s")
  • 获取开始和结束之间的秒数差
  • 添加1,因为接下来使用的range是末端独占的
  • 从0到diff采样N秒,并将其转换为TimedeltaIndex以实现矢量化可添加性
  • 将这些偏移添加到开始日期

运行示例:

In [60]: N = 10
    ...: diff = (max_date - min_date).total_seconds() + 1
    ...: offsets = random.sample(range(int(diff)), k=N)
    ...: result = min_date + pd.TimedeltaIndex(offsets, unit="s")

In [61]: result
Out[61]:
DatetimeIndex(['2019-01-01 16:30:47', '2019-01-01 00:05:32',
               '2019-01-01 02:35:15', '2019-01-01 21:25:09',
               '2019-01-01 19:09:26', '2019-01-01 06:25:37',
               '2019-01-01 07:28:47', '2019-01-01 00:25:18',
               '2019-01-01 17:04:58', '2019-01-01 05:15:46'],
              dtype='datetime64[ns]', freq=None)

返回的是一个DatetimeIndex,但如果需要,.tolist() ing它将给出一个时间戳列表。

相关问题