pandas根據時間(日期)跨度處理數據


簡介

  最近給同學幫忙的時候需要按一個時間(日期)范圍內的數據進行一些統計和處理,而且期望這個時間范圍是一個可以修改的參數,這里順便記錄和分享一下。數據不方便放上來,這里就自己隨便模擬一些數據出來。

代碼

  主要使用要pandas和datetime這兩個庫。我們先生成模擬數據

import pandas as pd
import datetime
df = pd.DataFrame(
  {
    'Symbol':['A','A','A', 'B', 'B', 'C', 'C', 'C'] ,
    'Msg':['AAA','AAA','AAC', 'BBB', 'BBC', 'CCC', 'CCC', 'CCD'] ,
    'Date':['02/20/2015','01/15/2016','02/21/2015', '02/24/2015','03/01/2015', '02/22/2015','01/17/2015','03/21/2015']
  }
)

① 先將日期轉變為pandas中的日期類型,排序方式為升序。為了后面能根據時間范圍篩選數據,還需要將索引設置為日期

df['Date'] =pd.to_datetime(df.Date)
df = df.sort_values(by='Date', ascending=True)
df.index = df['Date']

② 利用 datetime.timedelta 自動計算。假設我們需要以7天為單位來處理數據,我們設置好起始時間,然后利用 datetime.timedelta 幫助我們計算終止時間(7天后的日期)。然后取出這范圍內的數據即可。

start = datetime.datetime.strptime(str(df['Date'][0]), '%Y-%m-%d %H:%M:%S')
end = start + datetime.timedelta(days=7)
df[start: end]

③ 基本的使用就是上面那個樣子,現在我們寫個函數來自動取出每個時間范圍內的數據就可以了,我們還需要知道數據集的時間跨度,以設置循環次數。

import math
delta = 7                                             # 處理的時間范圍
day_num = (df['Date'].max() - df['Date'].min()).days  # 數據集的時間跨度
loop_num = math.ceil(day_num / delta)                 # 計算循環次數
start = datetime.datetime.strptime(str(df['Date'][0]), '%Y-%m-%d %H:%M:%S')
end = start + datetime.timedelta(days=delta)
for _ in range(loop_num):
    df_period = df[start: end]
    print('處理%s至%s' % (start, end))
    start = end
    end += datetime.timedelta(days=delta)

timedelta 支持的時間單位如下圖所示,可以根據實際情況和需要進行選擇,更改單位時注意循環上限即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM