小編給大家分享一下Pandas時(shí)間序列中時(shí)期及其算術(shù)運(yùn)算的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有凌河免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。import pandas as pd
import numpy as np
一、時(shí)間類型及其在python中對(duì)應(yīng)的類型
時(shí)間戳–timestamp
時(shí)間間隔–timedelta
時(shí)期–period
二、時(shí)期
時(shí)期表示的是時(shí)間區(qū)間,比如數(shù)日、數(shù)月、數(shù)季、數(shù)年等
1.定義一個(gè)Period
p = pd.Period(2007,freq='A-DEC') #表示以12月作為結(jié)束的一整年,這里表示從2007-01-01到2017-12-31的全年
p
Period('2007', 'A-DEC')
2.通過(guò)加減整數(shù)可以實(shí)現(xiàn)對(duì)Period的移動(dòng)
p+5
Period('2012', 'A-DEC')
p-2
Period('2005', 'A-DEC')
3.如果兩個(gè)Period對(duì)象擁有相同頻率,則它們的差就是它們之間的單位數(shù)量
pd.Period('2014',freq='A-DEC') - p
4.period_range函數(shù)可用于創(chuàng)建規(guī)則的時(shí)期范圍
rng = pd.period_range('1/1/2000','6/30/2000',freq='M') #創(chuàng)建從2001-01-01到2000-06-30所有月份的Period
pd.Series(np.random.randn(6),index=rng)
2000-01 -1.125053 2000-02 1.035250 2000-03 -0.796830 2000-04 0.381285 2000-05 0.533522 2000-06 -2.733462 Freq: M, dtype: float64
5.PeriodIndex類的構(gòu)造函數(shù)允許直接使用一組字符串表示一段時(shí)期
values = ['2001Q3','2002Q2','2003Q1'] index = pd.PeriodIndex(values,freq='Q-DEC') index
PeriodIndex(['2001Q3', '2002Q2', '2003Q1'], dtype='period[Q-DEC]', freq='Q-DEC')
三、時(shí)期的頻率轉(zhuǎn)換-asfreq
1.通過(guò)asfreq可以將頻率轉(zhuǎn)換
p = pd.Period('2007',freq='A-DEC') # 2007年1月1日到2007年12月31日
p.asfreq('M',how='start') # 將評(píng)率為年(20070101-20071231)轉(zhuǎn)換頻率為月201701
Period('2007-01', 'M')
p.asfreq('M',how='end') # 將評(píng)率為年(20070101-20071231)轉(zhuǎn)換頻率為月201712
Period('2007-12', 'M')
2.不同頻率經(jīng)過(guò)asfreq轉(zhuǎn)換后的結(jié)果不同
p = pd.Period('2007',freq='A-JUN') # 2006年7月1日到2007年6月30日
p.asfreq('D','start')
Period('2006-07-01', 'D')
p.asfreq('D','end')
Period('2007-06-30', 'D')
3.從高頻率轉(zhuǎn)換為低頻率時(shí),超時(shí)期(較大的時(shí)期)是由子時(shí)期(較小的時(shí)期)的位置絕對(duì)的
p = pd.Period('2007-08','M')
p.asfreq('A-JUN') # 200708對(duì)于頻率A-JUN是屬于2008年度的
Period('2008', 'A-JUN')
4.對(duì)于PeriodIndex或TimeSeries的頻率轉(zhuǎn)換方式相同
rng = pd.period_range('2006','2009',freq='A-DEC')
ts = pd.Series(np.random.randn(len(rng)),index=rng)
ts
2006 -1.202858 2007 -1.132553 2008 0.902564 2009 0.800859 Freq: A-DEC, dtype: float64
ts.asfreq('M',how='start')
2006-01 -1.202858 2007-01 -1.132553 2008-01 0.902564 2009-01 0.800859 Freq: M, dtype: float64
ts.asfreq('B',how='end')
2006-12-29 -1.202858 2007-12-31 -1.132553 2008-12-31 0.902564 2009-12-31 0.800859 Freq: B, dtype: float64
四、按季度計(jì)算的時(shí)期頻率
許多季度型數(shù)據(jù)會(huì)涉及“財(cái)年末”的概念,通常是一年12個(gè)月中某月的最后一個(gè)工作日或日歷日。因此,時(shí)間“2012Q4”根據(jù)財(cái)年末的不同會(huì)有不同的含義。pandas支持12種可能的季度型頻率,即Q-JAN到Q-DEC。
1.財(cái)政年度和季度
p = pd.Period('2012Q4',freq='Q-JAN') # Q-JAN是指1月末的工作日是財(cái)政年末
p
Period('2012Q4', 'Q-JAN')
p.asfreq('D','start')
Period('2011-11-01', 'D')
p.asfreq('D','end')
Period('2012-01-31', 'D')
2.該季度倒數(shù)第二個(gè)工作日的下午4點(diǎn)
p4pm = (p.asfreq('B','e')-1).asfreq('T','s')+16*60
p4pm.to_timestamp()
Timestamp('2012-01-30 16:00:00')
3.相同的運(yùn)算可以應(yīng)用到TimeSeries
rng = pd.period_range('2011Q3','2012Q4',freq='Q-JAN') ts = pd.Series(np.arange(len(rng)),index=rng) ts
2011Q3 0 2011Q4 1 2012Q1 2 2012Q2 3 2012Q3 4 2012Q4 5 Freq: Q-JAN, dtype: int32
new_rng = (rng.asfreq('B','e')-1).asfreq('T','s')+16*60 ts.index = new_rng.to_timestamp() ts
2010-10-28 16:00:00 0 2011-01-28 16:00:00 1 2011-04-28 16:00:00 2 2011-07-28 16:00:00 3 2011-10-28 16:00:00 4 2012-01-30 16:00:00 5 dtype: int32
五、Timestamp與Period互相轉(zhuǎn)換
1.通過(guò)to_period方法,可以將時(shí)間戳(timestamp)索引的Series和DataFrame對(duì)象轉(zhuǎn)換為以時(shí)期(period)索引
rng = pd.date_range('1/1/2000',periods=3,freq='M') ts = pd.Series(np.random.randn(3),index=rng) ts
2000-01-31 -0.501502 2000-02-29 -1.299610 2000-03-31 -0.705091 Freq: M, dtype: float64
pts = ts.to_period()
pts
2000-01 -0.501502 2000-02 -1.299610 2000-03 -0.705091 Freq: M, dtype: float64
2.將timestamp轉(zhuǎn)換為period是運(yùn)行重復(fù)的
rng = pd.date_range('1/29/2000',periods=6,freq='D') ts2 = pd.Series(np.random.randn(6),index=rng) ts2.to_period('M')
2000-01 1.368367 2000-01 -0.256934 2000-01 0.417902 2000-02 -1.065910 2000-02 -1.694405 2000-02 0.665471 Freq: M, dtype: float64
3.to_timestamp可以將period轉(zhuǎn)換為timestamp
pts.to_timestamp(how='end')
2000-01-31 -0.501502 2000-02-29 -1.299610 2000-03-31 -0.705091 Freq: M, dtype: float64
六、通過(guò)數(shù)組創(chuàng)建PeriodIndex
某些數(shù)據(jù)集中時(shí)間信息是分開在多個(gè)列存放的,可以通過(guò)PeriodIndex的參數(shù)將這些列組合在一起
year = [2017,2017,2017,2017,2018,2018,2018,2018] quarter = [1,2,3,4,1,2,3,4] index = pd.PeriodIndex(year=year,quarter=quarter,freq='Q-DEC') index
PeriodIndex(['2017Q1', '2017Q2', '2017Q3', '2017Q4', '2018Q1', '2018Q2', '2018Q3', '2018Q4'], dtype='period[Q-DEC]', freq='Q-DEC')
以上是“Pandas時(shí)間序列中時(shí)期及其算術(shù)運(yùn)算的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!