在python中,如何将日期的日数设置为130到130之间的任意随机数?

2024-04-25 19:39:59 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我有一个约会,日期是2017-10

现在我把这个日期传给 dateparse = lambda dates: pandas.datetime.strptime(dates, '%Y-%m') 此函数 它将返回2017-10-01作为一个日期类型,但现在我想有任何随机数从0-31,而不是01在该日期我怎么能做到这一点

在数组中,如何交换所有行的列数据?你知道吗

谢谢


Tags: 数据lambda函数类型pandasdatetime数组约会
3条回答

我会这样做:

In [21]: def random_dt(s):
    ...:     d = pd.to_datetime(s, format='%Y-%m')
    ...:     return d + pd.DateOffset(days=random.randint(0, d.daysinmonth-1))
    ...:

In [22]: random_dt('2017-10')
Out[22]: Timestamp('2017-10-31 00:00:00')

In [23]: random_dt('2017-10')
Out[23]: Timestamp('2017-10-19 00:00:00')

In [24]: random_dt('2017-10')
Out[24]: Timestamp('2017-10-24 00:00:00')

In [25]: random_dt('2017-10')
Out[25]: Timestamp('2017-10-12 00:00:00')

更新:new feauture in Pandas 0.20.1:

to_datetime() has gained a new parameter, origin, to define a reference date from where to compute the resulting timestamps when parsing numerical values with a specific unit specified. (GH11276, GH11745)

def random_dt(s, periods=1, format='%Y-%m'):
    d = pd.to_datetime(s, format=format)
    return pd.to_datetime(np.random.randint(0, d.daysinmonth-1, periods), 
                          unit='D', origin=d)

演示:

In [21]: random_dt('2017-10', 4)
Out[21]: DatetimeIndex(['2017-10-05', '2017-10-01', '2017-10-28', '2017-10-05'], dtype='datetime64[ns]', freq=None)

In [22]: random_dt('2017-Jan', periods=3, format='%Y-%b')
Out[22]: DatetimeIndex(['2017-01-14', '2017-01-09', '2017-01-25'], dtype='datetime64[ns]', freq=None)

您可以使用random.randrange()将日数添加到日期时间:

In [22]: from random import randrange
In [23]: import pandas as pd

In [24]: dateparse = lambda date: pd.datetime.strptime(date + '-{}'.format(randrange(1,31)), '%Y-%m-%d')

In [25]: dateparse('2017-10')
Out[25]: datetime.datetime(2017, 10, 27, 0, 0)

In [26]: dateparse('2017-10')
Out[26]: datetime.datetime(2017, 10, 17, 0, 0)

In [27]: dateparse('2017-10')
Out[27]: datetime.datetime(2017, 10, 1, 0, 0)

例如,使用随机变量

import random
random_number = random.randint(0, 31)

这将使变量random\u数成为0到31之间的随机整数

相关问题 更多 >