gpt4 book ai didi

Python pandas dataframe - 任何以编程方式设置频率的方法?

转载 作者:太空狗 更新时间:2023-10-29 20:56:06 26 4
gpt4 key购买 nike

我正在尝试像这样处理 CSV 文件:

df = pd.read_csv("raw_hl.csv", index_col='time', parse_dates = True))
df.head(2)
high low
time
2014-01-01 17:00:00 1.376235 1.375945
2014-01-01 17:01:00 1.376005 1.375775
2014-01-01 17:02:00 1.375795 1.375445
2014-01-01 17:07:00 NaN NaN
...
2014-01-01 17:49:00 1.375645 1.375445

type(df.index)
pandas.tseries.index.DatetimeIndex

但是这些不会自动有一个频率:

print df.index.freq
None

如果它们有不同的频率,能够自动设置一个会很方便。最简单的方法是比较前两行:

tdelta = df.index[1] - df.index[0]
tdelta
datetime.timedelta(0, 60)

到目前为止一切顺利,但是直接将频率设置为此 timedelta 失败:

df.index.freq = tdelta
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-25-3f24abacf9de> in <module>()
----> 1 df.index.freq = tdelta

AttributeError: can't set attribute

有没有办法(最好是相对无痛!)做到这一点?

答案:Pandas 已为数据框提供了 index.inferred_freq 属性 - 可能是为了避免覆盖用户定义的频率。df.index.inferred_freq = 'T'

所以这似乎只是使用它而不是 df.index.freq 的问题。感谢 Jeff,他还在下面提供了更多详细信息 :)

最佳答案

如果您一个固定频率,当您查看df.index.freq

时会报告它
In [20]: df = DataFrame({'A' : np.arange(5)},index=pd.date_range('20130101 09:00:00',freq='3T',periods=5))

In [21]: df
Out[21]:
A
2013-01-01 09:00:00 0
2013-01-01 09:03:00 1
2013-01-01 09:06:00 2
2013-01-01 09:09:00 3
2013-01-01 09:12:00 4

In [22]: df.index.freq
Out[22]: <3 * Minutes>

具有不规则频率将返回None

In [23]: df.index = df.index[0:2].tolist() + [Timestamp('20130101 09:05:00')] + df.index[-2:].tolist()

In [24]: df
Out[24]:
A
2013-01-01 09:00:00 0
2013-01-01 09:03:00 1
2013-01-01 09:05:00 2
2013-01-01 09:09:00 3
2013-01-01 09:12:00 4

In [25]: df.index.freq

您可以通过这样做恢复正常频率。下采样到较低的频率(没有重叠值的地方),前向填充,然后重新索引到所需的频率和端点)。

In [31]: df.resample('T').ffill().reindex(pd.date_range(df.index[0],df.index[-1],freq='3T'))
Out[31]:
A
2013-01-01 09:00:00 0
2013-01-01 09:03:00 1
2013-01-01 09:06:00 2
2013-01-01 09:09:00 3
2013-01-01 09:12:00 4

关于Python pandas dataframe - 任何以编程方式设置频率的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607974/

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