【Python】干货分享 | Pandas处理时间序列的数据
在進行金融數據的分析以及量化研究時,總是避免不了和時間序列的數據打交道,常見的時間序列的數據有比方說一天內隨著時間變化的溫度序列,又或者是交易時間內不斷波動的股票價格序列,今天小編就為大家來介紹一下如何用“Pandas”模塊來處理時間序列的數據
01
創建一個時間戳
首先我們需要導入我們所需要用到的模塊,并且隨機創建一個時間戳,有兩種方式來創建,如下所示
import pandas as pd import numpy as np from datetime import datetimepd.to_datetime('2021-05-20')??##output:?Timestamp('2021-05-20?00:00:00') pd.Timestamp('2021-05-20')? ##output:?Timestamp('2021-05-20?00:00:00')02
訪問時間信息
我們可以來查看一下這個時間戳所代表的年、月、日等信息
a = pd.Timestamp('2021-10-01') a.day_name()????## Friday,看來今年的10月1日是周五哈? a.month_name()??##?October 十月份 a.day(),?a.month(),?a.year()??##?1,?10,?2021,查看年月日等信息03
數據格式轉化為時間序列
接下來我們做一些數據處理,例如將數據集中的“time_frame”轉化為時間序列的格式
df = pd.DataFrame({"time_frame": ["2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05"]}) df['time_frame'] = pd.to_datetime(df['time_frame'])04
字符串轉化成時間格式
要是我們想將里面的時間序列的數據變成字符串時,可以這么來操作
date_string = [str(x) for x in df['time_frame'].tolist()]當然從字符串轉換回去時間序列的數據,在“Pandas”中也有相應的方法可以來操作,例如
time_string = ['2021-02-14 00:00:00', '2021-02-14 01:00:00', '2021-02-14 02:00:00', '2021-02-14 03:00:00', '2021-02-14 04:00:00', '2021-02-14 05:00:00', '2021-02-14 06:00:00'] pd.to_datetime(time_string, infer_datetime_format = True)當然我們還有其他的方式來實現將字符串轉換成時間格式,例如
import?datetime text_1 = "2021-02-14" datetime.datetime.strptime(text_1, '%Y-%m-%d')05
提取時間格式背后的信息
在時間序列的數據處理過程當中,我們可能需要經常來實現下面的需求
l求某個日期對應的星期數(2021-06-22是第幾周)
l判斷一個日期是周幾(2021-02-14是周幾)
l判斷某一日期是第幾季度,等等
當數據集中的某一列已經轉化為是“datetime64”的格式時,僅需要用到“dt”的方法,就可以快速得到相應的結果,例如
df = pd.DataFrame({"time_frame": ["2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06", "2021-01-07", "2021-01-08"]}) df["time_frame"]?=?pd.to_datetime(df["time_frame"]) #?一周中的第幾天 df.time_frame.dt.dayofweek[0] #?返回對應額日期 df.time_frame.dt.date[0] #?返回一周中的第幾天,0對應周一,1對應周二df.time_frame.dt.weekday[0]除此之外,下表列出了幾個并不常見的方法和屬性
06
關于date_range函數
可用于創建時間索引,并且時間頻率可以靈活調整,參數“freq”就是用來調整時間頻率的,“M”代表月份,“D”就代表的是天數了
pd.date_range(start='2021-02-14',?periods=10,?freq='M')07
period_range和timedelta_range函數
和上面的“date_range”函數類似,用于創建時間索引
pd.period_range('2021', periods=10, freq='M') pd.timedelta_range(start='0', periods=24, freq='H')08
關于重采樣resample
我們也可以對時間序列的數據集進行重采樣,重采樣就是將時間序列從一個頻率轉換到另一個頻率的處理過程,主要分為降采樣和升采樣,將高頻率、間隔短的數據聚合到低頻率、間隔長的過程稱為是降采樣,反之則是升采樣.
我們先來創建一個包含30個值和一個時間序列索引的數據集
返回5天時間內的數據加總
S.resample('5D').sum()09
關于滑動窗口“rolling”和“expanding”
因此便就有了滑動窗口這一個概念,簡而言之就是將某個時點的數據衍生到包含這個時點的一段時間內做一個數據統計。首先我們先來創建需要用到的數據集
index?=?pd.date_range('2021-01-01',periods=30)? data = pd.DataFrame(np.arange(len(index)),index=index,columns=['test'])主要有“rolling”方法和“expanding”方法,“rolling”方法考慮的是一定的時間段內的數據,而“expanding”考慮的則是之前所有的數據,例如
# 移動3個值,進行求和 data['sum'] = data.test.rolling(3).sum() # 移動3個值,進行求平均數 data['mean']?=?data.test.rolling(3).mean()我們發現數據集中有一些缺失值,我們這里就可以使用“pandas”中特有的方法來進行填充,例如
data['mean'].fillna(method = 'backfill') 往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【Python】干货分享 | Pandas处理时间序列的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔发布其首个适配Win11的显卡驱动
- 下一篇: Win7系统虚拟键盘打开的方法