導航:首頁 > 編程語言 > python時間序列pandas

python時間序列pandas

發布時間:2023-11-29 17:56:42

1. python時間序列(2)

時期(period)表示的是時間區間,比如數日、數月、數季、數年等。Period類所 表示的就是這種數據類型,其構造函數需要用到一個字元串或整數,以及表11-4中 的頻率:

這里,這個Period對象表示的是從2007年1月1日到2007年12月31日之間的整段時間。

只需對Period對象加上或減去一個整數即可達到根據其頻率進行位移的效果:

如果兩個Period對象擁有相同的頻率,則它們的差就是它們之間的單位數量:

period_range函數可用於創建規則的時期范圍:

PeriodIndex類保存了一組Period,它可以在任何pandas數據結構中被用作軸索引:

如果你有一個字元串數組,你也可以使用PeriodIndex類:

Period和PeriodIndex對象都可以通過其asfreq方法被轉換成別的頻率。假設我們有 一個年度時期,希望將其轉換為當年年初或年末的一個月度時期。該任務非常簡 單:

你可以將Period('2007','A-DEC')看做一個被劃分為多個月度時期的時間段中的游 標。圖11-1對此進行了說明。
對於一個不以12月結束的財政年度,月度子時期的歸屬情況就不一樣了:

在將高頻率轉換為低頻率時,超時期(superperiod)是由子時期(subperiod)所 屬的位置決定的。例如,在A-JUN頻率中,月份「2007年8月」實際上是屬於周期「2008年」的:

完整的PeriodIndex或TimeSeries的頻率轉換方式也是如此:

這里,根據年度時期的第一個月,每年的時期被取代為每月的時期。
如果我們想要 每年的最後一個工作日,我們可以使用「B」頻率,並指明想要該時期的末尾:

未完待續。。。

2. python中時間序列數據的一些處理方式

datetime.timedelta對象代表兩個時間之間的時間差,兩個date或datetime對象相減就可以返回一個timedelta對象。
利用以下數據進行說明:

如果我們發現時間相關內容的變數為int,float,str等類型,不方便後面的分析,就需要使用該函數轉化為常用的時間變數格式:pandas.to_datetime

轉換得到的時間單位如下:

如果時間序列格式不統一,pd.to_datetime()的處理方式:

當然,正確的轉換是這樣的:

第一步:to_datetime()
第二步:astype(datetime64[D]),astype(datetime64[M])

本例中:

order_dt_diff必須是Timedelta(Ɔ days 00:00:00')格式,可能是序列使用了diff()
或者pct_change()。

前者往往要通過'/np.timedelta'去掉單位days。後者其實沒有單位。

假如我們要統計某共享單車一天內不同時間點的用戶使用數據,例如

還有其他維度的提取,年、月、日、周,參見:
Datetime properties

注意 :.dt的對象必須為pandas.Series,而不可以是Series中的單個元素

3. Pandas-時間序列基礎

Python標准庫中包含用於日期和時間的數據類型,而且還有日歷方面的功能,我們主要會用到datetime、time和calendar模塊,datetime.datetime是用的最多的數據類型。

datetime以毫秒形式存儲日期和時間,datetime.timedelta表示兩個datetime對象之間的時間差.

可以給datetime對象加上或者減去一個或多個timedelta,會產生一個新對象:

利用str或者strftime方法,datetime對象和pandas的Timestamp對象可以被格式化為字元串:

datetime.strptime也可以用這些格式化編碼將字元串轉化為日期:

datetime.strptime是通過已知格式進行日期解析的最佳方式,但是每次都要編寫格式定義很麻煩,尤其是對於一些常見的日期格式,這種情況下,可以用dateutil這個第三方包中的parser.parse方法,dateutil可以解析幾乎所有人類能夠理解的日期表示形式:

在國際通用格式中,日通常出現在月的前面,傳入dayfirst=True即可:

pandas通常是用於處理成組日期的,不管這些日期是DataFrame的軸索引還是列,to_datetime方法可以解析多種不同的日期表示形式。

to_datetime可以處理缺失值,NAT是pandas中時間戳數據的NA值:

pandas最基本的時間序列類型就是以時間戳為索引的Series:

這里的Series索引不是普通的索引,而是DatetimeIndex,而ts變為了一個TimeSeries,同時,可以看到,pandas用Numpy的datetime64數據類型以納秒形式存儲時間戳。

跟其他Series一樣,不同索引的時間序列之間的算數運算會自動對齊:

DateTimeIndex中的各個標量值是pandas的Timestamp對象.
由於TimeSeries是Series的一個子類,所以在索引以及數據選曲方面他們的行為是一樣的,但是我們還可以傳入一個可以被解釋為日期的字元串來進行索引:

對於較長的時間序列,只需傳入年或年月即可輕松選取數據的切片:

通過日期進行切片的方式只對規則Series有效:

還有一個等價的實例方法也可以截取兩個日期之間的TimeSeries:

DataFrame也同樣適用上面的規則

pandas中的時間序列一般被認為是不規則的,也就是說,沒有固定的頻率,對於大部分程序而言,這是無所謂的,但是,他常常需要以某種相對固定的頻率進行分析,比如每月,每日,每15min等。pandas有一套標准時間序列頻率以及用於重采樣,頻率推斷,生成固定頻率日期范圍的工具.
例如,我們可以將之前的時間序列轉換為一個具有固定頻率(每日)的時間序列,只需調用resample即可.返回DatetimeIndexResampler,獲取值使用asfreq():

生成日期范圍使用date_range函數

默認情況下,date_range會產生按天計算的時間點,如果只傳入起始或結束日期,那就還得傳入一個表示一段時間的數字:

如果你不想按天生成數據,想要按照一定的頻率生成,我們傳入freq參數即可.如想按5小時生成數據:

如果你想生成一個由每月最後一個工作日組成的日期索引,可以使用BM頻率:

date_range默認會保留起始和結束的時間戳的時間信息,但是如果我們想產生一組規范化到午夜的時間戳,normalize選項可以實現這個功能:

WOM(week of Month)是一種非常實用的頻率類,它以WOM開頭,它使你能獲得諸如每月第三個星期五之類的日期:

4. python(pandas模塊)

Pandas是Python的一個數據分析包,最初由AQR Capital
Management於2008年4月開發,並於2009年底開源出來,目前由專注於Python數據包開發的Pydata開發team繼續開發和維護,屬於PyData項目的一部分,pandas最初被作為金融數據分析工具而開發出來,因此pandas為時間序列分析提供了很好的支持。

Pandas的名稱來自於面板數據和python數據分析。panel
data是經濟學中關於多維數據集的一個術語,在Pandas中也提供了panel的數據類型。

Pandas數據結構:

Series:一維數組,與numpy中的一維array類似。二者與Python基本的數據結構list相近,Series如今能保存不同種數據類型,字元串、boolean值、數字等都能保存在series中。

Time-series:以時間為索引的series。

DataFrame:二維的表格型數據結構,很多功能與R中的data.frame類似,可以將DataFrame理解為Series的容器。

Panel :三維的數組,可以理解為DataFrame的容器。

Panel4D:是像Panel一樣的4維數據容器。

PanelND:擁有factory集合,可以創建像Panel4D一樣N維命名容器的模塊。

5. python數據分析時間序列如何提取一個月的數據

python做數據分析時下面就是提取一個月數據的教程1. datetime庫

1.1 ​​datetime.date​​
1) ​​datetime.date.today()​​ 返回今日,輸出的類型為date類

import datetime
today = datetime.date.today()
print(today)
print(type(today))
–> 輸出的結果為:

2020-03-04
<class 'datetime.date'>
將輸出的結果轉化為常見數據類型(字元串)

print(str(today))
print(type(str(today)))
date = str(today).split('-')
year,month,day = date[0],date[1],date[2]
print('今日的年份是{}年,月份是{}月,日子是{}號'.format(year,month,day))
–> 輸出的結果為:(轉化為字元串之後就可以直接進行操作)

2020-03-04
<class 'str'>
今日的年份是2020年,月份是03月,日子是04號
2) ​​datetime.date(年,月,日)​​,獲取當前的日期

date = datetime.date(2020,2,29)
print(date)
print(type(date))
–> 輸出的結果為:

2020-02-29
<class 'datetime.date'>
1.2 ​芹喊​datetime.datetime​​
1) ​​datetime.datetime.now()​​輸出當前時間,datetime類

now = datetime.datetime.now()
print(now)
print(type(now))
–> 輸出的結果為:(注意秒後面有個不確定尾數)

2020-03-04 09:02:28.280783
<class 'datetime.datetime'>
可通過​​str()​​轉化為字元串(和上面類似)

print(str(now))
print(type(str(now)))
–> 輸出的結果為:(這里也可以跟上面的處理類似分別獲得相應的數據,但是也可以使用下面更直接的方法來獲取)

2020-03-04 09:04:32.271075
<class 'str'>
2) 通過自帶的方法獲取年月日,時分秒(這里返回的是​​int​​整型數據,注意區別)

now = datetime.datetime.now()
print(now.year,type(now.year))
print(now.month,type(now.month))
print(now.day,type(now.day))
print(now.hour,type(now.hour))
print(now.minute,type(now.minute))
print(now.second,type(now.second))
print(now.date(),type(now.date()))
print(now.date().year,type(now.date().year))
–> 輸出的結果為:(首先注意輸出中倒數第二個還是上面的​​純檔datetime.date​​​對象,這里是用來做時間對比的,同時除了這里的​​datetime.datetime​​​有這種方法,​​datetime.date​​​對象也有。因為此方法獲取​​second​​是取的整型數據,自然最後的不確定尾數就被取整處理掉了)

2020 <class 'int'>
3 <class 'int'>
4 <class 'int'>
9 <class 'int'>
12 <class '做首亂int'>
55 <class 'int'>
2020-03-04 <class 'datetime.date'>
2020 <class 'int'>

閱讀全文

與python時間序列pandas相關的資料

熱點內容
網站圖標素材壓縮包 瀏覽:890
娛樂化app怎麼做 瀏覽:636
加密貨幣行業前景如何 瀏覽:572
arm查詢法的局限性和編譯流程 瀏覽:78
醒圖的文件夾叫什麼 瀏覽:998
php程序員北京 瀏覽:175
gcc編譯進程數據 瀏覽:653
手機上的文件夾是怎樣的 瀏覽:166
微雲群共享文件夾改變 瀏覽:534
程序員三年後能做什麼 瀏覽:449
分解運演算法則 瀏覽:876
python腳本執行sudo 瀏覽:721
安徽科海壓縮機 瀏覽:372
怎麼下載app里的講義 瀏覽:158
命令重啟伺服器 瀏覽:210
android電視root許可權獲取 瀏覽:249
解放戰爭pdf王樹增 瀏覽:685
python壓測app介面 瀏覽:953
抖音app怎麼推薦 瀏覽:100
歌庫伺服器能做其他什麼用途 瀏覽:95