1. 程式人生 > >pandas時間序列頻率處理

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