gpt4 book ai didi

python - 将 Pandas datetimeindex 的频率从每天更改为每小时,以根据每日重采样数据的条件选择每小时数据

转载 作者:行者123 更新时间:2023-11-28 19:02:44 25 4
gpt4 key购买 nike

我正在研究每小时和低于一小时的时间序列。但是,我需要测试的条件之一是日平均值。我需要找到满足条件的日期,然后从这些日期中选择所有时间(或其他时间步长)来更改它们的值。但现在,唯一实际更改的值是所选日期的第一个小时。如何每小时选择和修改?

这是我的数据集的示例:

In[]:  print(hourly_dataset.head())
Out[]:
GHI DNI DHI
2016-01-01 00:00:00 0.0 0.0 0.0
2016-01-01 01:00:00 0.0 0.0 0.0
2016-01-01 02:00:00 0.0 0.0 0.0
2016-01-01 03:00:00 0.0 0.0 0.0
2016-01-01 04:00:00 0.0 0.0 0.0

这是我需要检查的条件。我将满足日标准差条件的指标保存为ix

ix = hourly_dataset['GHI'].resample('D').std()[hourly_dataset['GHI'].resample('D').std() > 300].index

In[]: print(ix)
Out[]: DatetimeIndex(['2016-05-31', '2016-07-17', '2016-07-18'], dtype='datetime64[ns]', freq=None)

但是后来我给那些日子分配了一个 nan 值,只有第一个小时实际上被修改为 nan。

hourly_dataset.loc[ix,'GHI'] = np.nan
In[]: print(hourly_dataset.loc['2016-05-31','GHI'].head())
Out[]:
2016-05-31 00:00:00 NaN
2016-05-31 01:00:00 0.0
2016-05-31 02:00:00 0.0
2016-05-31 03:00:00 0.0
2016-05-31 04:00:00 7.4
Freq: H, Name: GHI, dtype: float64

我希望那天的所有值都分配给 nan。感谢您的帮助!

最佳答案

可能的解决方法:

for i in ix:
hourly_dataset.loc[i.strftime('%Y-%m-%d'),'GHI'] = np.nan

说明

我仔细看了看,问题是当我们尝试通过 Timestamp 选择索引时。我能够重现您的错误。

考虑这个例子:

import pandas as pd

df = pd.DataFrame({
'date': pd.date_range(start='2018-01-01', freq='2H', periods=24),
'GHI': 0
}).set_index('date')


ix = pd.date_range(start='2018-01-01', end='2018-01-02')
df.loc[ix, 'GHI'] = np.nan
print(df.head())

返回:

                     GHI
date
2018-01-01 00:00:00 NaN
2018-01-01 02:00:00 0.0
2018-01-01 04:00:00 0.0
2018-01-01 06:00:00 0.0
2018-01-01 08:00:00 0.0

也许不是最好的,但一种解决方法是循环遍历 ix 并将 ix 上的 loc 用作格式为 YYYY-mm-dd 的日期时间字符串。

# df.loc[ix.strftime('%Y-%m-%d'), 'GHI'] = np.nan --> does not work
for i in ix:
df.loc[i.strftime('%Y-%m-%d'), 'GHI'] = np.nan

print(df.head())

date
2018-01-01 00:00:00 NaN
2018-01-01 02:00:00 NaN
2018-01-01 04:00:00 NaN
2018-01-01 06:00:00 NaN
2018-01-01 08:00:00 NaN

关于python - 将 Pandas datetimeindex 的频率从每天更改为每小时,以根据每日重采样数据的条件选择每小时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50766107/

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