Pandas時間序列基礎詳解(轉換,索引,切片)
阿新 • • 發佈:2020-02-26
時間序列的型別:
時間戳:具體的時刻
固定的時間區間:例如2007年的1月或整個2010年
時間間隔:由開始時間和結束時間表示,時間區間可以被認為是間隔的特殊情況
實驗時間和消耗時間:每個時間是相對於特定開始時間的時間的量度,(例如自從被放置在烤箱中每秒烘烤的餅乾的直徑)
日期和時間資料的型別及工具
datetime模組中的型別:
date 使用公曆日曆儲存日曆日期(年,月,日) time 將時間儲存為小時,分鐘,秒,微秒 datetime 儲存日期和時間 timedelta 表示兩個datetime值之間的差(如日,秒,微秒) tzinfo 用於儲存時區資訊的基本型別 from datetime import datetime now = datetime.now() now.year #當時年份 now.month #當前月份 now.day #當前天 now.time() #當前時間 datetime.time(12,27,41,303676) 兩個時間戳運算得到一個timedelta(時間差)型別
日期時間差 timedelta型別
from datetime import timedelta start = datetime(2019,2,5) start + timedelta(20) #預設為天 datetime.datetime(2019,25,0)
字串和datetime互相轉換
date.strptime方法將字串轉換為時間
values = '2019-8-9' datetime.strptime(values,'%Y-%m-%d') #是在已知格式的前提下轉換日期的好方式 datetime.datetime(2019,8,9,0) datestrs = ['2019-8-7','2019-8-9'] [datetime.strptime(values,'%Y-%m-%d') for values in datestrs] [datetime.datetime(2019,7,0),datetime.datetime(2019,0)]
更為通用的日期轉換格式
from dateutil.parser import parse parse(values) datetime.datetime(2019,0) parse('8,5,2018',dayfirst=True) #dayfirst引數 第一個元素是天 datetime.datetime(2018,0)
pd.to_datetime() 用於軸索引或DataFrame的列
pd.to_datetime(datestrs)
DatetimeIndex(['2019-08-07','2019-08-09'],dtype='datetime64[ns]',freq=None)
更為簡單的轉換
datetime(2019,1,1)
datetime.datetime(2019,0)
時間序列的算術運算(在日期上自動對齊)
index = pd.date_range('3/3/2018',periods=20) ts = pd.Series(np.random.randn(20),index=index) ts 2018-03-03 0.611591 2018-03-04 0.119168 2018-03-05 0.514390 2018-03-06 1.010600 2018-03-07 0.181763 2018-03-08 -0.290964 2018-03-09 0.252927 2018-03-10 -1.645692 2018-03-11 -0.500014 2018-03-12 -1.247355 ts1 = ts[::2] 2018-03-03 0.611591 2018-03-05 0.514390 2018-03-07 0.181763 2018-03-09 0.252927 2018-03-11 -0.500014 2018-03-13 -0.122307 2018-03-15 0.361237 2018-03-17 -1.894853 2018-03-19 -1.608989 2018-03-21 1.274982 Freq: 2D,dtype: float64 ts + ts1 2018-03-03 1.223183 2018-03-04 NaN 2018-03-05 1.028781 2018-03-06 NaN 2018-03-07 0.363526 2018-03-08 NaN 2018-03-09 0.505853 2018-03-10 NaN 2018-03-11 -1.000028 2018-03-12 NaN 2018-03-13 -0.244613 2018-03-14 NaN 2018-03-15 0.722473 2018-03-16 NaN 2018-03-17 -3.789707 2018-03-18 NaN 2018-03-19 -3.217979 2018-03-20 NaN 2018-03-21 2.549963 2018-03-22 NaN ts.index.dtype #資料;型別在納秒級的解析度下儲存時間戳 dtype('<M8[ns]') ts.index[0] #datetimeindex中的標量值是一個時間戳(timestamp) Timestamp('2018-03-03 00:00:00',freq='D')
時間序列的索引,選擇,子集
時間序列的索引
ts = pd.Series(np.random.randn(1000),index = pd.date_range('1/1/2016',periods=1000)) s['2018-6'] #時間序列的索引 也可用ts.loc[] 2018-06-01 1.371843 2018-06-02 -0.356041 2018-06-03 0.111452 2018-06-04 0.325222 2018-06-05 -0.863138 2018-06-06 -0.115909 2018-06-07 0.062894 2018-06-08 0.223712
時間序列的切片
ts['2018-9-23':] #時間序列的切片 2018-09-23 0.005519 2018-09-24 -1.374038 2018-09-25 1.769112 2018-09-26 -0.000306 Freq: D,dtype: float64 ts.truncate(before='2018-9-24') #使用truncate方法向後切片 2018-09-24 -1.374038 2018-09-25 1.769112 2018-09-26 -0.000306 Freq: D,dtype: float64 ts.truncate(after='2016-1-4') #向前切片 2016-01-01 -1.776334 2016-01-02 -0.488550 2016-01-03 -1.299889 2016-01-04 -1.883413 Freq: D,dtype: float64
含有重複索引的時間序列的分組處理
index = pd.DatetimeIndex(['1/1/2017','1/1/2017','1/2/2017','1/3/2017']) dup_ta = pd.Series(np.arange(4),index=index) dup_ta 2017-01-01 0 2017-01-01 1 2017-01-02 2 2017-01-03 3 dtype: int32 dup_ta.groupby(level=0).mean()
以上這篇Pandas時間序列基礎詳解(轉換,索引,切片)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。