gpt4 book ai didi

python - 关于 Pandas 的 asfreq 方法的使用缺少一些内容

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:17 26 4
gpt4 key购买 nike

考虑以下代码:

    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

如果我这样做

    print(ts.asfreq(pandas.DateOffset(days=5),how='start'))

现在有所不同并收到完全相同的结果。

然后我看到 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 生成时间索引。第三点之后显示了一个示例。

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

import pandas as pd
import numpy as np
rng = pd.period_range('20140526','20140606')

如果我将频率设置为“开始”:

print(rng.asfreq('H', how='start'))

结果是:

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。

但是,如果“how”设置为“end”

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')

所有时间均设置为 23:00,即每天的最后一个小时时间戳。

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

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

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

关于python - 关于 Pandas 的 asfreq 方法的使用缺少一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com