簡體   English   中英

將 5 分鍾時間間隔合並為每小時時間間隔的問題

[英]Issue combining 5 minute time intervals into hourly time intervals

這是我第一次發帖,如果我的帖子不是最好的,請原諒...

我以前看過這個,將我的 5 分鍾間隔合並為每小時間隔,並顯示每小時的音量。 將 5 分鍾的時間范圍合並為每小時

這是我正在使用的 CSV 數據的片段。 分隔符是逗號。 數據從 20117 年 6 月一直持續到 2021 年底。

日期戳 時間戳 det_vol
2017-06-01 13:45 582
2017-06-01 13:50 592
2017-06-01 13:55 578
2017-06-01 14:00 544
2017-06-01 14:05 521

我使用pd.read_csv()讀取數據並通過值排序以獲得 2017 年 8 月的所有體積讀數

vds2 = vds2[(vds2['datestamp'].dt.year == 2017) & (vds2['datestamp'].dt.month == 8)]
vds2 = vds2.rename(columns={'det_vol': 'Volume'})
vds2['Date'] = pd.to_datetime(vds2['datestamp']).dt.date
vds2['Time'] = pd.to_datetime(vds2['timestamp']).dt.time
vds2 = vds2[['Date','Time','Volume']]
vds2 = vds2.reset_index(drop=True)

這讓我得到了我的最終數據框:

          Date       Time    Volume
0   2017-08-01      00:00        57
1   2017-08-01      00:05        97
2   2017-08-01      00:10        79
3   2017-08-01      00:15        63
4   2017-08-01      00:20        87
... ... ... ...

但是,當我嘗試執行以下操作時,第一行出現錯誤

vds2.index = pd.to_datetime(vds2['Date'] + ' ' + vds2['Time'])
vds2 = vds2.resample('H').agg({'Volume':'sum'})

TypeError: unsupported operand type(s) for +: 'DatetimeArray' and 'str'

我想也許問題是DateTime的格式,這就是我嘗試實施的原因

vds2['Date'] = pd.to_datetime(vds2['Date']).dt.date
vds2['Time'] = pd.to_datetime(vds2['Time']).dt.time

但是我仍然遇到類似的錯誤...

TypeError: unsupported operand type(s) for +: 'datetime.date' and 'str'

我敢肯定這很簡單,但會很感激任何幫助。 謝謝!

>>> df.index = pd.to_datetime(df['datestamp'] + df['timestamp'])
>>> df.resample('H').det_vol.sum()
2017-06-01 13:00:00    1752
2017-06-01 14:00:00    1065
Freq: H, Name: det_vol, dtype: int64

您需要在索引中包含日期時間才能重新采樣。

在測試了您的附加代碼並從您的示例中創建了一個小的“CSV”文件后,我得到了同樣的不需要的錯誤。 我不確定,但在搜索似乎正在發生的事情時,以下代碼行將您的時間戳存儲為字符串。

vds2['Time'] = pd.to_datetime(vds2['timestamp']).dt.time

隨后對“pd.to_datetime”函數的調用失敗了。

當我嘗試各種場景並獲得輸出時,我沒有轉換日期戳或時間戳字段。 我只是讓他們保持原樣。 所以我所做的只是在從“CSV”文件導入數據后重命名列。 以下是我的示例代碼,基於您的程序但不進行任何數據元素轉換。 我只是重命名列。

import pandas as pd

vds2=pd.read_csv('DateTime.csv')

print(vds2)

#vds2 = vds2[(vds2['datestamp'].dt.year == 2017) & (vds2['datestamp'].dt.month == 8)]
vds2 = vds2.rename(columns={'det_vol': 'Volume'})
vds2 = vds2.rename(columns={'datestamp': 'Date'})
vds2 = vds2.rename(columns={'timestamp': 'Time'})
vds2 = vds2[['Date','Time','Volume']]
vds2 = vds2.reset_index(drop=True)

vds2.index = pd.to_datetime(vds2['Date'] + ' ' + vds2['Time'])
vds2.index.name = 'Date and Time'
vds2 = vds2.resample('H').agg({'Volume':'sum'})

rslt_df = vds2[vds2['Volume'] > 0]

print(rslt_df)

在示例數據上運行該程序會在我的終端上產生以下輸出。

@Una:~/Python_Programs/DateTime$ python3 DateTime.py 
   index datestamp timestamp  det_vol
0      0  6/1/2017     13:45      582
1      1  6/1/2017     13:50      592
2      2  6/1/2017     13:55      578
3      3  6/1/2017     14:00      544
4      4  6/1/2017     14:05      521
                     Volume
Date and Time              
2017-06-01 13:00:00    1752
2017-06-01 14:00:00    1065

也許高於我工資等級的人可以更好地解釋當您的程序嘗試將時間數據從您的數據幀轉換為時間戳時發生了什么,但看起來您甚至不需要通過 datetime 函數。 看起來您可以根據自己的喜好重命名列並繼續匯總和處理。

希望有幫助。

問候。

暫無
暫無

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

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