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

Posted

技术标签:

【中文标题】如何在python中将日期的天数设置为1-30之间的任意随机数?【英文标题】:How to set the day number of a date to any random number from 1-30 in python? 【发布时间】:2017-10-05 10:21:37 【问题描述】:

您好,我有一个包含日期的 dateSting,比如 2017-10

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

在一个数组中如何交换所有行的列数据?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用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)

【讨论】:

【参考方案2】:

例如使用随机变量

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

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

【讨论】:

【参考方案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() 获得了一个新参数origin,用于定义一个 计算结果时间戳的参考日期 使用指定的特定单位解析数值。 (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)

【讨论】:

以上是关于如何在python中将日期的天数设置为1-30之间的任意随机数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中将月份转换为确切的天数

试图在Python中找到用户出生日期和现在之间的天数差异

关于如何通过日期计算天数

如何在Python中将字符串解析为日期时间

如何在 Python/Pandas 中将变量设置为“今天”日期

在 impala 中将儒略日期转换为公历日期