pandas時間序列頻率處理
《Python for Data Analysis》
生成日期範圍
pd.data_range()
In [15]: rng = pd.date_range('2000-01-01', '2000-06-30', freq='BM')
In [16]: rng
Out[16]:
DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31', '2000-04-28',
'2000-05-31', '2000-06-30'],
dtype='datetime64[ns]', freq='BM')
In [17]: Series(np.random.randn(6 ),index=rng)
Out[17]:
2000-01-31 0.586341
2000-02-29 -0.439679
2000-03-31 0.853946
2000-04-28 -0.740858
2000-05-31 -0.114699
2000-06-30 -0.529631
Freq: BM, dtype: float64
頻率和日期偏移量
from pandas.tseries.offsets import Hour, Minute
移動(shifting)資料
ts.shift()
時期及其算術運算
Period類
、 PeriodIndex類
pd.period_range()
:建立規則的時期範圍。
In [20]: rng = pd.period_range('2000-01-01', '2000-06-30', freq='M')
...: rng
...:
Out[20]: PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06'], dtype='int64', freq='M')
建構函式:
pd.PeriodIndex()
時期的頻率轉換
ts.asfred()
Timestamp(時間戳) 和 Period(時期) 的 轉換
In [21]: rng = pd.date_range('2000-01-01', '2000-06-30' , freq='M')
In [22]: rng
Out[22]:
DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31', '2000-04-30',
'2000-05-31', '2000-06-30'],
dtype='datetime64[ns]', freq='M')
In [23]: rng = pd.period_range('2000-01-01', '2000-06-30', freq='M')
In [24]: rng
Out[24]: PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06'], dtype='int64', freq='M')
to_period()
to_timestamp()
In [25]: rng = pd.date_range('2000-01-01', periods=3, freq='M')
...: ts = pd.Series(np.random.randn(3), index=rng)
...: ts
...:
Out[25]:
2000-01-31 0.455968
2000-02-29 1.720553
2000-03-31 1.695834
Freq: M, dtype: float64
In [26]: pts = ts.to_period()
...: pts
...:
Out[26]:
2000-01 0.455968
2000-02 1.720553
2000-03 1.695834
Freq: M, dtype: float64
重取樣及頻率轉換!!
重取樣(resampling)指的是將時間序列從一個頻率轉換到另一個頻率的處理過程。高頻率資料聚合到低頻率稱為降取樣(downsamling),而將低頻率資料轉換到高頻率資料則稱為升取樣(upsampling,通常伴隨著插值)。
resample()
: 頻率轉換工作的主力函式
引數 | 說明 |
---|---|
freq | 表示重取樣頻率的字串或DataOffset,例如‘M’、‘5min’、Second(15) |
how=’mean’ | 用於產生聚合值的函式名或陣列函式。預設為‘mean’ –> FutureWarning: how in .resample() is deprecated the new syntax is .resample(…).mean() |
axis=0 | 重取樣的軸 |
fill_method=None | 升取樣時如何插值,如‘ffill’或‘bfill’。預設不插值。 |
closed=’right’ | 降取樣時哪一段是閉合的。 |
label=’right’ | 降取樣時如何設定聚合值的標籤 |
loffset=None | 面元標籤的時間校正值,比如‘-1s’或者Second(-1)用於將聚合標籤調早1秒 |
limit = None | 在前向或後向填充時,允許填充的最大時期數 |
kind = None | 聚合到時期(Period)或者時間戳(Timestamp),預設聚合到時間序列的索引型別 |
convention=None | 重取樣時期時,低頻轉高頻的約定,預設‘end’。 |
降取樣
使用resample
看下面的例子,使用resample
對資料進行降取樣時,需要考慮兩樣東西:
- 各區間哪邊是閉合的。
- 如何標記各個聚合面元,用區間的開頭還是末尾。
In [27]: rng = pd.date_range('2000-01-01', periods=100, freq='D')
...: ts = pd.Series(np.random.randn(len(rng)), index=rng)
...: ts
...:
Out[27]:
2000-01-01 -0.189731
...
2000-04-09 0.283110
Freq: D, dtype: float64
In [28]: ts.resample('M').mean()
Out[28]:
2000-01-31 -0.019276
2000-02-29 -0.041192
2000-03-31 -0.214551
2000-04-30 0.411190
Freq: M, dtype: float64
In [29]: ts.resample('M', kind='period').mean()
Out[29]:
2000-01 -0.019276
2000-02 -0.041192
2000-03 -0.214551
2000-04 0.411190
Freq: M, dtype: float64
In [31]: rng = pd.date_range('2000-01-01', periods=12, freq='T')
...: ts = pd.Series(np.arange(12), index=rng)
...: ts
...:
Out[31]:
2000-01-01 00:00:00 0
2000-01-01 00:01:00 1
2000-01-01 00:02:00 2
2000-01-01 00:03:00 3
2000-01-01 00:04:00 4
2000-01-01 00:05:00 5
2000-01-01 00:06:00 6
2000-01-01 00:07:00 7
2000-01-01 00:08:00 8
2000-01-01 00:09:00 9
2000-01-01 00:10:00 10
2000-01-01 00:11:00 11
Freq: T, dtype: int32
In [32]: ts.resample('5min', closed='right', label='right').sum()
Out[32]:
2000-01-01 00:00:00 0
2000-01-01 00:05:00 15
2000-01-01 00:10:00 40
2000-01-01 00:15:00 11
Freq: 5T, dtype: int32
In [33]: ts.resample('5min', closed='right',
...: label='right', loffset='-1s').sum()
Out[33]:
1999-12-31 23:59:59 0
2000-01-01 00:04:59 15
2000-01-01 00:09:59 40
2000-01-01 00:14:59 11
Freq: 5T, dtype: int32
通過groupby進行降取樣
打算根據月份或者星期進行分組,傳入能夠訪問時間序列的索引上的這些欄位的函式。
In [35]: rng = pd.date_range('2000-01-01', periods=100, freq='D')
...: ts = pd.Series(np.random.randn(len(rng)), index=rng)
...: ts
In [36]: ts.groupby(lambda x : x.month).mean()
Out[36]:
1 -0.126008
2 0.079132
3 0.026093
4 0.321457
dtype: float64
In [37]: ts.groupby(lambda x : x.weekday).mean()
Out[37]:
0 0.280289
1 0.174452
2 0.166102
3 -0.779489
4 -0.036195
5 0.086394
6 0.234831
dtype: float64
升取樣
In [38]: import pandas as pd
...: import numpy as np
...: frame = pd.DataFrame(np.random.randn(2, 4),
...: index=pd.date_range('1/1/2000', periods=2,
...: freq='W-WED'),
...: columns=['Colorado', 'Texas', 'New York', 'Ohio'])
...: frame
...:
Out[38]:
Colorado Texas New York Ohio
2000-01-05 -0.925525 -0.434350 1.037349 -1.532790
2000-01-12 1.075744 0.237922 -0.907699 0.592211
In [39]: df_daily = frame.resample('D').asfreq()
...: df_daily
...:
Out[39]:
Colorado Texas New York Ohio
2000-01-05 -0.925525 -0.434350 1.037349 -1.532790
2000-01-06 NaN NaN NaN NaN
2000-01-07 NaN NaN NaN NaN
2000-01-08 NaN NaN NaN NaN
2000-01-09 NaN NaN NaN NaN
2000-01-10 NaN NaN NaN NaN
2000-01-11 NaN NaN NaN NaN
2000-01-12 1.075744 0.237922 -0.907699 0.592211
In [40]: frame.resample('D').ffill()
Out[40]:
Colorado Texas New York Ohio
2000-01-05 -0.925525 -0.434350 1.037349 -1.532790
2000-01-06 -0.925525 -0.434350 1.037349 -1.532790
2000-01-07 -0.925525 -0.434350 1.037349 -1.532790
2000-01-08 -0.925525 -0.434350 1.037349 -1.532790
2000-01-09 -0.925525 -0.434350 1.037349 -1.532790
2000-01-10 -0.925525 -0.434350 1.037349 -1.532790
2000-01-11 -0.925525 -0.434350 1.037349 -1.532790
2000-01-12 1.075744 0.237922 -0.907699 0.592211
# 之前的frame.resample('D', how='mean')
In [41]: df_daily = frame.resample('D').mean()
...: df_daily
...:
Out[41]:
Colorado Texas New York Ohio
2000-01-05 -0.925525 -0.434350 1.037349 -1.532790
2000-01-06 NaN NaN NaN NaN
2000-01-07 NaN NaN NaN NaN
2000-01-08 NaN NaN NaN NaN
2000-01-09 NaN NaN NaN NaN
2000-01-10 NaN NaN NaN NaN
2000-01-11 NaN NaN NaN NaN
2000-01-12 1.075744 0.237922 -0.907699 0.592211
對於時期進行重取樣。
In [42]: frame = pd.DataFrame(np.random.randn(24, 4),
...: index=pd.period_range('1-2000', '12-2001',
...: freq='M'),
...: columns=['Colorado', 'Texas', 'New York', 'Ohio'])
...: frame[:5]
...: annual_frame = frame.resample('A-DEC').mean()
...: annual_frame
...:
Out[42]:
Colorado Texas New York Ohio
2000 0.442672 0.104870 -0.067043 -0.128942
2001 -0.263757 -0.399865 -0.423485 0.026256
In [43]: annual_frame.resample('Q-DEC', convention='end').ffill()
Out[43]:
Colorado Texas New York Ohio
2000Q4 0.442672 0.104870 -0.067043 -0.128942
2001Q1 0.442672 0.104870 -0.067043 -0.128942
2001Q2 0.442672 0.104870 -0.067043 -0.128942
2001Q3 0.442672 0.104870 -0.067043 -0.128942
2001Q4 -0.263757 -0.399865 -0.423485 0.026256
相關推薦
pandas時間序列頻率處理
《Python for Data Analysis》 生成日期範圍 pd.data_range() In [15]: rng = pd.date_range('2000-01-01', '2000-06-30', freq='BM') I
Pandas時間序列:頻率和日期偏移量
import pandas as pd import numpy as np 一、介紹 pandas中的頻率是由一個基礎頻率(例如“日”、“月”)和一個乘陣列成。 基礎頻率通常以一個字串別名表
Pandas時間序列處理
1、建立 from datetime import datetime import pandas as pd import numpy as np # 指定index為datetime的list date_list = [datetime(2018, 3
SpringBoot的json序列化及時間序列化處理
urn G1 public nwr port 方法 als 前後臺 nconf 使用場景:前臺的多種時間格式存入後臺,後臺返回同時的時間格式到前臺。 1 在config目錄下配置jscksonConfig.java package com.test.domi.config
pandas時間序列滑窗
print 4.0 als 圖片 技術分享 驗證 mage num range 時間序列數據統計—滑動窗口 窗口函數 import pandas as pd import numpy as np ser_obj = pd.Series(np.random.randn(10
pandas 時間序列
時間序列資料的意義取決於具體的應用場景,主要有以下幾種: 時間戳(timestamp):特定的時刻。 固定時期(period):如2017年1月或2018年全年 時間間隔(interval):由起始和結束時間戳表示。時期(period)可以被看做間隔(interval)的特例。
python ---Pandas時間序列:生成指定範圍的日期
引入包 import pandas as pd import numpy as np 1.生成指定範圍的日期 print pd.date_range('11/1/2018','11/9/2018') 輸出: &n
pandas時間序列操作方法
在pandas中擁有強大的時間序列操作方法。 直接上demo: import numpy as np import pandas as pd from pandas import Series, DataFrame from datetime import datetime np
#python#DataFrame 時間序列資料處理常用操作
有X個機組以15分鐘為步長的長系列(年月日時分)出力的資料,想處理成每個機組的,以“年月日”為索引值,每行顯示1天96個點出力的形式。先利用df.head()把dataframe按96切割成Y份,然後將Y份的第x列(x號機組的出力)提取出來,放到list裡,再利用concat
pandas 時間序列、繪圖、儲存檔案 date_range()
pandas.date_range(start=None, end=None, periods=None, freq=’D’, tz=None, normalize=False, name=None, closed=None, **kwargs)引數start:string或
Pandas 時間序列資料繪製X軸主要刻度和次要刻度
先上效果圖吧(圖中Tue表示週二): Pandas和matplotlib.dates都是使用matplotlib.units來定位刻度。 matplotlib.dates可以方便的手動設定刻
pandas資料處理實踐四(時間序列date_range、資料分箱cut、分組技術GroupBy)
時間序列: 關鍵函式 pandas.date_range(start = None,end = None,periods = None,freq = None,tz = None,normalize = False,name = None,closed = None,**
python+pandas+時間、日期以及時間序列處理
先簡單的瞭解下日期和時間資料型別及工具 python標準庫包含於日期(date)和時間(time)資料的資料型別,datetime、time以及calendar模組會被經常用到。 datetime以毫秒形式儲存日期和時間,datetime.timedelta
Python時間序列處理之datetime與pandas模組
每次遇到時間型別的資料做處理的時候,我會非常頭疼,我忍無可忍之下決定硬著頭皮學習一下,發現也不是很複雜,掌握一些基礎方法就可以做,下面我將一一介紹這些有效的方法。 datetime模組 #匯入datetime包 import datetime #獲取當
時間序列處理方法
code 相關 ima 數據讀取 pacf air 讀取 imp 數列 時間序列處理方法 1、ARIMA模型ARIMA模型,是統計學中的常見對時間序列處理的模型,全稱為自回歸移動平均模型。ARIMA模型主要有p,d,q三個參數。 p--代表預測模型中采用的時序數據本身的滯
幾個資料缺失處理,時間序列的python包——fancyimpute/impyute/knnimpute/tslearn/
由於專案的需要,對時間序列資料中存在的資料缺失和異常進行處理,所以找到幾個類似的python模組,裡面有knn等方式填補缺失值的演算法。目前正在嘗試使用中,後續有案例發上來。 先附上每個包的簡介和GitHub: https://pypi.org/project/fancyimpute/
R語言時間序列處理介紹--以A股財報資料處理為案例
本文以處理A股財務報表為例,介紹了將資料轉換成時間序列後在進行處理的一些方法和思路。將會用到xts,lapply,do.call等資料結構和函式。 1、 簡介 我們從各個途徑獲得了個股的財務報表原始資料後,還需要對資料做一些處理,以便後續指標計算和使用。舉個簡單的例子,
[譯]在 Keras 中使用一維卷積神經網路處理時間序列資料
原文地址:Introduction to 1D Convolutional Neural Networks in Keras for Time Sequences 原文作者:Nils Ackermann 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/go
pandas的時間序列:日期操作、時間序列平滑
基礎操作 1)將“字元型別的日期列”轉化成“時間索引(DatetimeIndex)” u 首先,利用 pandas 的to_datetime 方法,把 "date" 列的字元型別資料解析成 datetime 物件。然後,把 "date" 列用作索引。 df['
pandas 對時間與日期處理
1、先把字串時間轉為時間型別: def func(x): y =pd.Timestamp(x) return y data.index = data.發博時間.apply(lambda x : func(x)) 2、對時間進行排序: data = data.so