簡體   English   中英

Python:使用 ffill() 將數據幀從每日數據上采樣到每小時數據

[英]Python: upsampling dataframe from daily to hourly data using ffill()

我正在嘗試將我的數據從每日頻率上采樣到每小時頻率並向前填充缺失的數據。

我從以下代碼開始:

df1 = pd.read_csv("DATA.csv")   
df1.head(5)

標題

然后我使用以下內容轉換為日期時間字符串並將日期/時間設置為索引:

df1['DT'] = pd.to_datetime(df1['DT']).dt.strftime('%Y-%m-%d %H:%M:%S')
df1.set_index('DT')

在此處輸入圖片說明

我嘗試每小時重新采樣如下:

df1['DT'] = df1.resample('H').ffill()

但我收到以下錯誤:

類型錯誤:僅對 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但得到了“RangeIndex”的實例

我認為我的 dtype 已經是上面 pd.to_datetime 代碼指示的日期時間。 我嘗試的任何東西似乎都不起作用。 誰能幫幫我嗎?

我的預期輸出如下:

DT                  VALUE
2016-08-01 00:00:00 0.000000
2016-08-01 01:00:00 0.000000
2016-08-01 02:00:00 0.000000

等等。

文件本身大約有 1000 行。 前 50 行左右為零,以便闡明實際數據的位置:

DT                  VALUE
2018-12-13 00:00:00 24000.000000
2018-12-13 01:00:00 24000.000000
2018-12-13 02:00:00 24000.000000
...
2018-12-13 23:00:00 24000.000000
2018-12-14 00:00:00 26000.000000
2018-12-14 01:00:00 26000.000000

等等。

嘗試將其分配回來

df1=df1.set_index('DT')

或者

df1.set_index('DT',inplace=True)

我假設你提到的數據集的一些初始行,

          DT    VALUE
0   2016-08-01  0
1   2016-08-02  0
2   2016-08-03  0
3   2016-08-04  0
4   2016-08-05  0
5   2016-08-06  0
6   2016-08-07  0
7   2016-08-08  0
8   2016-08-09  0

然后,像這樣在DT索引,

df = df.set_index('DT')
df

輸出:

           VALUE
   DT   
2016-08-01  0
2016-08-02  0
2016-08-03  0
2016-08-04  0
2016-08-05  0
2016-08-06  0
2016-08-07  0
2016-08-08  0
2016-08-09  0

現在,重新采樣您的數據框,

df = df.resample('H').ffill()
df

輸出:顯示輸出的一些初始值,

                VALUE
    DT  
2016-08-01 00:00:00 0
2016-08-01 01:00:00 0
2016-08-01 02:00:00 0
2016-08-01 03:00:00 0
2016-08-01 04:00:00 0
2016-08-01 05:00:00 0
2016-08-01 06:00:00 0
2016-08-01 07:00:00 0
2016-08-01 08:00:00 0
2016-08-01 09:00:00 0
2016-08-01 10:00:00 0

您可以將索引轉換為pd.DatetimeIndex然后重新采樣。 我也不認為你需要(或想要) strftime()調用:

df1 = pd.read_csv("DATA.csv")
df1['DT'] = pd.to_datetime(df1['DT'])
df1.set_index('DT')
df1.index = pd.DatetimeIndex(df1.index)
df1['DT'] = df1.resample('H').ffill()

注意:您可能可以結合一堆這樣的內容,它仍然會很清楚,例如:

df1 = pd.read_csv("DATA.csv")
df1.index = pd.DatetimeIndex(pd.to_datetime(df1['DT']))
df1['DT'] = df1.resample('H').ffill()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM