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

在python中,如何将日期的日数设置为1-30之间的任意随机数?,python,python-2.7,python-3.x,date,pandas,Python,Python 2.7,Python 3.x,Date,Pandas,你好,我有一个包含日期的约会,比如2017-10 现在我要把这个日期传给 dateparse=lambda日期:pandas.datetime.strtime(日期,%Y-%m') 此函数 它将返回2017-10-01作为日期类型,但现在我想用0-31中的任意随机数,而不是该日期中的01,我如何才能实现这一点 在数组中,如何交换所有行的列数据 谢谢您可以使用random.randrange()将日数添加到日期时间: In [22]: from random import randrange In

你好,我有一个包含日期的约会,比如2017-10

现在我要把这个日期传给
dateparse=lambda日期:pandas.datetime.strtime(日期,%Y-%m')
此函数 它将返回2017-10-01作为日期类型,但现在我想用0-31中的任意随机数,而不是该日期中的01,我如何才能实现这一点

在数组中,如何交换所有行的列数据


谢谢

您可以使用
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)
我会这样做:

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')
更新:

to_datetime()
获得了一个新参数
origin
,用于定义 从何处计算结果时间戳的参考日期 使用指定的特定单位解析数值。(GH11276, GH11745)

演示:


例如,使用随机变量

import random
random_number = random.randint(0, 31)
这将使变量random_数成为介于0和31之间的随机整数

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)
import random
random_number = random.randint(0, 31)