Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 大熊猫上采样不包括一年中最后一天的23小时_Python_Pandas_Google Colaboratory_Pandas Resample - Fatal编程技术网

Python 大熊猫上采样不包括一年中最后一天的23小时

Python 大熊猫上采样不包括一年中最后一天的23小时,python,pandas,google-colaboratory,pandas-resample,Python,Pandas,Google Colaboratory,Pandas Resample,我有一个带有日期|天气信息的时间序列数据框,如下所示: 我正尝试使用以下方法将其采样到每小时数据: weather.resample('H').pad() 我希望在24天内*365天内看到8760个条目。然而,它只返回8737次,12月31日的最后23次间隔丢失。我需要做什么特别的事情才能在最后一天达到24次间歇 提前感谢。熊猫将2017-12-31标准化为2017-12-31 00:00,然后创建以该最后日期时间结束的范围。。。在使用重新采样之前,我将包括最后一行 df.loc['2018-

我有一个带有日期|天气信息的时间序列数据框,如下所示:

我正尝试使用以下方法将其采样到每小时数据:
weather.resample('H').pad()

我希望在24天内*365天内看到8760个条目。然而,它只返回8737次,12月31日的最后23次间隔丢失。我需要做什么特别的事情才能在最后一天达到24次间歇


提前感谢。

熊猫将
2017-12-31
标准化为
2017-12-31 00:00
,然后创建以该最后日期时间结束的范围。。。在使用重新采样之前,我将包括最后一行

df.loc['2018-01-01'] = 0

编辑: 您可以使用
numpy获得想要的结果。重复

拿这个

np.random.seed(1)
weather = pd.DataFrame(index=pd.date_range('2017-01-01', '2017-12-31'),
    data={'WEATHER_MAX': np.random.random(365)*15})

            WEATHER_MAX
2017-01-01     6.255330
2017-01-02    10.804867
2017-01-03     0.001716
2017-01-04     4.534989
2017-01-05     2.201338
...                 ...
2017-12-27     4.503725
2017-12-28     2.145087
2017-12-29    13.519627
2017-12-30     8.123391
2017-12-31    14.621106

[365 rows x 1 columns]
通过在轴=1上重复,您可以将默认的
范围(24)
列名转换为小时时间差

# repeat, then stack
hourly = pd.DataFrame(np.repeat(weather.values, 24, axis=1),
    index=weather.index).stack()

# combine date and hour
hourly.index = (
    hourly.index.get_level_values(0) +
    pd.to_timedelta(hourly.index.get_level_values(1), unit='h')
)
hourly = hourly.rename('WEATHER_MAX').to_frame()
输出

                     WEATHER_MAX
2017-01-01 00:00:00     6.255330
2017-01-01 01:00:00     6.255330
2017-01-01 02:00:00     6.255330
2017-01-01 03:00:00     6.255330
2017-01-01 04:00:00     6.255330
...                          ...
2017-12-31 19:00:00    14.621106
2017-12-31 20:00:00    14.621106
2017-12-31 21:00:00    14.621106
2017-12-31 22:00:00    14.621106
2017-12-31 23:00:00    14.621106

[8760 rows x 1 columns]

该做什么和原因与@RichieV的答案相同。
但是,使用的值不是0或无意义的值,必须使用2018-01-01实际测量的有效数据

这是因为使用无意义的值会降低2017-12-31年重新采样数据的有效性以及使用该数据得出的结果


  • 在数据末尾准备2018-01-01的有效值
  • 调用重采样
  • 重新采样后删除2018-01-01的数据
  • 您将获得2017年的8670份数据

  • 看看@RichieV修改后的答案:

    我误解了这个问题。
    我的答案是用插值等来补充重采样。


    如果与当天的00:00相同的值是正确的,那么这将是一种不同的思维方式。

    您好,欢迎来到这里,非常好的第一个问题。您很快就会有一个新的数据框了,我建议您提供一些代码来重新创建您的数据框或将其粘贴为文本。在数据末尾准备一个2018-01-01的有效值,然后调用重采样。如果您在重新采样后删除2018-01-01的数据,将有8760个数据。@kunif您可以将其作为答案发布感谢您帮助我理解这个问题。虽然我希望重采样中有一个内置的功能来满足我的需要,但我还是能够用上面的建议来修复它。我理解,如果你仔细想想,这应该是预期的行为,所以当你有datetime而不仅仅是date(例如
    2017-12-31 15:45
    )时,重采样不会超过最后一个日期时间请问您使用此重采样的目的是什么?也许您可以避免重新采样,并利用numpy的广播尝试预处理和组合每小时的能耗数据与每日格式的天气数据。我正在尝试将天气数据重采样为每小时一次,这样我就有了全面的每小时数据。我没有遇到消费数据的问题,因为它已经是每小时一次了。
                         WEATHER_MAX
    2017-01-01 00:00:00     6.255330
    2017-01-01 01:00:00     6.255330
    2017-01-01 02:00:00     6.255330
    2017-01-01 03:00:00     6.255330
    2017-01-01 04:00:00     6.255330
    ...                          ...
    2017-12-31 19:00:00    14.621106
    2017-12-31 20:00:00    14.621106
    2017-12-31 21:00:00    14.621106
    2017-12-31 22:00:00    14.621106
    2017-12-31 23:00:00    14.621106
    
    [8760 rows x 1 columns]