Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pandas.date_range()获取在指定开始日期和结束日期之间有n个指定时段(相等)的时间序列_Python_Datetime_Pandas_Time Series - Fatal编程技术网

Python 如何使用pandas.date_range()获取在指定开始日期和结束日期之间有n个指定时段(相等)的时间序列

Python 如何使用pandas.date_range()获取在指定开始日期和结束日期之间有n个指定时段(相等)的时间序列,python,datetime,pandas,time-series,Python,Datetime,Pandas,Time Series,我想在开始日期和结束日期(包括这些界限)之间获得一个列表或n个日期序列,但是 ValueError的结果:必须指定两个开始、结束或期间。我不能使用freq=freq参数,因为我的日期范围不会是统一的——它可能是一个月到两年的跨度,因此我想要一个具有n个点的等距时间序列 谢谢 我不认为你可以仅使用numpy,但为什么不使用numpy的: [11]中的start=pd.Timestamp('2012-01-01') 在[12]中:end=pd.时间戳('2012-02-01') 在[13]中:np.

我想在开始日期和结束日期(包括这些界限)之间获得一个列表或n个日期序列,但是

ValueError的结果:必须指定两个开始、结束或期间。我不能使用freq=freq参数,因为我的日期范围不会是统一的——它可能是一个月到两年的跨度,因此我想要一个具有n个点的等距时间序列


谢谢

我不认为你可以仅使用numpy,但为什么不使用numpy的:

[11]中的
start=pd.Timestamp('2012-01-01')
在[12]中:end=pd.时间戳('2012-02-01')
在[13]中:np.linspace(start.value,end.value,10)#包括10个日期
出[13]:
阵列([1.32537600e+18,1.32567360e+18,1.32597120e+18,
1.32626880e+18、1.326566400E+18、1.32686400e+18、,
1.32716160e+18、1.32745920e+18、1.32775680e+18、,
1.32805440e+18])
在[14]中:pd.to_datetime(np.linspace(start.value,end.value,10))
出[14]:
[2012-01-01 00:00:00, ..., 2012-02-01 00:00:00]
长度:10,频率:无,时区:无

您可以将其作为频率传递,但对于不能平均分配的时间,这可能/将不准确:

In [21]: (end - start)/ 9
Out[21]: datetime.timedelta(3, 38400)

In [22]: ((end - start)/ 9).total_seconds()
Out[22]: 297600.0

# Note: perhaps there's a better way to pass this as a freq?
In [23]: pd.date_range(start=start, end=end, freq='%iS' % ((end - start)/ 9).total_seconds())
Out[23]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-01-01 00:00:00, ..., 2012-02-01 00:00:00]
Length: 10, Freq: 297600S, Timezone: None
[21]中的
:(结束-开始)/9
Out[21]:datetime.timedelta(338400)
在[22]中:((结束-开始)/9).total_seconds()
Out[22]:297600.0
#注意:也许有更好的方法将其作为freq传递?
在[23]中:pd.date\u范围(start=start,end=end,freq=%为“%”((end-start)/9)。总秒数()
出[23]:
[2012-01-01 00:00:00, ..., 2012-02-01 00:00:00]
长度:10,频率:297600,时区:无
从Pandas 0.23(或更早版本)开始,您可以像最初尝试的那样使用
Pandas.date\u range
。它不会引发错误,其行为与您预期的一样。例如:

pd.date_range('2016-01-01', '2017-01-01', periods=13, tz='utc')
Out[44]: 
DatetimeIndex(['2016-01-01 00:00:00+00:00', '2016-01-31 12:00:00+00:00',
               '2016-03-02 00:00:00+00:00', '2016-04-01 12:00:00+00:00',
               '2016-05-02 00:00:00+00:00', '2016-06-01 12:00:00+00:00',
               '2016-07-02 00:00:00+00:00', '2016-08-01 12:00:00+00:00',
               '2016-09-01 00:00:00+00:00', '2016-10-01 12:00:00+00:00',
               '2016-11-01 00:00:00+00:00', '2016-12-01 12:00:00+00:00',
               '2017-01-01 00:00:00+00:00'],
              dtype='datetime64[ns, UTC]', freq=None)

2016年(闰年)共有366天,因此时间戳间隔为30.5天。

谢谢-np.linspace非常有用-我实际上在列表中使用了它,在结束/开始时减去/添加天数。@arosner09如果这有帮助,请向上投票/接受:这非常有效,但似乎是一种变通方法。。如果指定了所有三个参数,为什么这不是
pd.date\u range
的默认行为?
In [21]: (end - start)/ 9
Out[21]: datetime.timedelta(3, 38400)

In [22]: ((end - start)/ 9).total_seconds()
Out[22]: 297600.0

# Note: perhaps there's a better way to pass this as a freq?
In [23]: pd.date_range(start=start, end=end, freq='%iS' % ((end - start)/ 9).total_seconds())
Out[23]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-01-01 00:00:00, ..., 2012-02-01 00:00:00]
Length: 10, Freq: 297600S, Timezone: None
pd.date_range('2016-01-01', '2017-01-01', periods=13, tz='utc')
Out[44]: 
DatetimeIndex(['2016-01-01 00:00:00+00:00', '2016-01-31 12:00:00+00:00',
               '2016-03-02 00:00:00+00:00', '2016-04-01 12:00:00+00:00',
               '2016-05-02 00:00:00+00:00', '2016-06-01 12:00:00+00:00',
               '2016-07-02 00:00:00+00:00', '2016-08-01 12:00:00+00:00',
               '2016-09-01 00:00:00+00:00', '2016-10-01 12:00:00+00:00',
               '2016-11-01 00:00:00+00:00', '2016-12-01 12:00:00+00:00',
               '2017-01-01 00:00:00+00:00'],
              dtype='datetime64[ns, UTC]', freq=None)