Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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 在熊猫的使用上遗漏了一些东西';asfreq法_Python_Pandas - Fatal编程技术网

Python 在熊猫的使用上遗漏了一些东西';asfreq法

Python 在熊猫的使用上遗漏了一些东西';asfreq法,python,pandas,Python,Pandas,考虑以下代码: r = pandas.date_range(datetime(2014,5,26),datetime(2014,6,6)) ts = pandas.Series(np.random.randn(len(r)), index=r) print(ts.asfreq(pandas.DateOffset(days=5),how='end')) 我认为我没有正确理解如何使用“how”参数。 使用上面的代码,我希望从最后开始,asfreq的结果每5天返回一次。我仍然

考虑以下代码:

    r = pandas.date_range(datetime(2014,5,26),datetime(2014,6,6))
    ts = pandas.Series(np.random.randn(len(r)), index=r)
    print(ts.asfreq(pandas.DateOffset(days=5),how='end'))
我认为我没有正确理解如何使用“how”参数。 使用上面的代码,我希望从最后开始,asfreq的结果每5天返回一次。我仍然得到:

2014-05-26    0.456856
2014-05-31   -0.552287
2014-06-05    0.169554
Freq: <DateOffset: kwds={'days': 5}>, dtype: float64
现在产生差异并得到完全相同的结果

然后,我看到pandas.Series.asfreq的文档中提到了以下内容:

how : {‘start’, ‘end’}, default end
    For PeriodIndex only, see PeriodIndex.asfreq
,这指出了问题所在,因为在我的示例中,我需要使用DatetimeIndex


那么,我的问题是,在我的示例中,对于结束日期为2014-6-6的范围,无论我在该范围上设置的开始日期是什么,始终返回最后一个点为2014-05-30的序列的正确调用是什么?asfreq似乎不适用于递减索引,因此反转索引似乎也不是一个选项…

要回答您的问题,这里需要解决几个问题:

首先,我不太明白在这里使用DateOffset的意义,您可以简单地将其替换为“5D”,它将生成相同的结果

其次,更好的做法是使用period_range生成时间索引。第三点后显示了一个示例

最后,当使用“如何”选项时,您似乎不理解asfreq在做什么。简而言之,当asfreq中的“freq”设置为更大的频率(或更小的时间间隔)时,将使用“how”选项。让我用下面的例子来说明这一点:

import pandas as pd
import numpy as np
rng = pd.period_range('20140526','20140606')
如果我将频率设置为“开始”:

结果是:

PeriodIndex(['2014-05-26 00:00', '2014-05-27 00:00', '2014-05-28 00:00',
         '2014-05-29 00:00', '2014-05-30 00:00', '2014-05-31 00:00',
         '2014-06-01 00:00', '2014-06-02 00:00', '2014-06-03 00:00',
         '2014-06-04 00:00', '2014-06-05 00:00', '2014-06-06 00:00'],
        dtype='int64', freq='H')
所有时间都设置为当天的00:00

但是,如果“如何”设置为“结束”

结果是:

PeriodIndex(['2014-05-26 23:00', '2014-05-27 23:00', '2014-05-28 23:00',
         '2014-05-29 23:00', '2014-05-30 23:00', '2014-05-31 23:00',
         '2014-06-01 23:00', '2014-06-02 23:00', '2014-06-03 23:00',
         '2014-06-04 23:00', '2014-06-05 23:00', '2014-06-06 23:00'],
        dtype='int64', freq='H')
所有小时都设置为23:00,换句话说,是每天的最后一个小时时间戳

所以这里的要点是:“how”只有在新频率(小时)大于旧频率(天)时才有用。但在这种情况下,您并不是对时间序列进行子集设置或重新采样,而是根据新的频率为每个时间点提供一个新的索引

至于如何实现您的目标,既然您在所有重要时间点前加了前缀,为什么不使用这些时间点创建一个期间索引:

r = pd.period_range('20140530','20140609',freq="5D")
print(r)
PeriodIndex(['2014-05-30', '2014-06-04', '2014-06-09'], dtype='int64', freq='5D')

请展示你想要的产品?
print(rng.asfreq('H', how='end'))
PeriodIndex(['2014-05-26 23:00', '2014-05-27 23:00', '2014-05-28 23:00',
         '2014-05-29 23:00', '2014-05-30 23:00', '2014-05-31 23:00',
         '2014-06-01 23:00', '2014-06-02 23:00', '2014-06-03 23:00',
         '2014-06-04 23:00', '2014-06-05 23:00', '2014-06-06 23:00'],
        dtype='int64', freq='H')
r = pd.period_range('20140530','20140609',freq="5D")
print(r)
PeriodIndex(['2014-05-30', '2014-06-04', '2014-06-09'], dtype='int64', freq='5D')