Pandas處理時間序列數據的20個關鍵知識點

2021-01-12 deephub

時間序列數據有許多定義,它們以不同的方式表示相同的含義。一個簡單的定義是時間序列數據包括附加到順序時間點的數據點。

時間序列數據的來源是周期性的測量或觀測。許多行業都存在時間序列數據。舉幾個例子:

一段時間內的股票價格每天,每周,每月的銷售額流程中的周期性度量一段時間內的電力或天然氣消耗率在這篇文章中,我將列出20個要點,幫助你全面理解如何用Pandas處理時間序列數據。

1.不同形式的時間序列數據

時間序列數據可以是特定日期、持續時間或固定的自定義間隔的形式。

時間戳可以是給定日期的一天或一秒,具體取決於精度。例如,' 2020-01-01 14:59:30 '是基於秒的時間戳。

2.時間序列數據結構

Pandas提供靈活和高效的數據結構來處理各種時間序列數據。

除了這3個結構之外,Pandas還支持日期偏移概念,這是一個與日曆算法相關的相對時間持續時間。

3.創建一個時間戳

最基本的時間序列數據結構是時間戳,可以使用to_datetime或Timestamp函數創建

import pandas as pdpd.to_datetime('2020-9-13')Timestamp('2020-09-13 00:00:00')pd.Timestamp('2020-9-13')Timestamp('2020-09-13 00:00:00')

4.訪問按時間戳保存的信息

我們可以獲得存儲在時間戳中的關於日、月和年的信息。

a = pd.Timestamp('2020-9-13')a.day_name()'Sunday'a.month_name()'September'a.day13a.month9a.year2020

5. 隱藏信息訪問

時間戳對象還保存有關日期算法的信息。例如,我們可以問這一年是不是閏年。以下是我們可以獲得的一些更具體的信息:

b = pd.Timestamp('2020-9-30')b.is_month_endTrueb.is_leap_yearTrueb.is_quarter_startFalseb.weekofyear40

6. 歐洲風格的日期

我們可以使用to_datetime函數處理歐洲風格的日期(即日期在先)。dayfirst參數被設置為True。

pd.to_datetime('10-9-2020', dayfirst=True)Timestamp('2020-09-10 00:00:00')pd.to_datetime('10-9-2020')Timestamp('2020-10-09 00:00:00')

注意:如果第一項大於12,Pandas會知道它不能是月。

pd.to_datetime('13-9-2020')Timestamp('2020-09-13 00:00:00')

7. 將數據格式轉換為時間序列數據

to_datetime函數可以將具有適當列的數據名稱轉換為時間序列。考慮以下數據格式:

pd.to_datetime(df)0 2020-04-13 1 2020-05-16 2 2019-04-11 dtype: datetime64[ns]

7.時間戳之外的時間表示

在現實生活中,我們幾乎總是使用連續的時間序列數據,而不是單獨的日期。而且,Pandas處理順序時間序列數據非常簡單。

我們可以將日期列表傳遞給to_datetime函數。

pd.to_datetime(['2020-09-13', '2020-08-12', '2020-08-04', '2020-09-05'])DatetimeIndex(['2020-09-13', '2020-08-12', '2020-08-04', '2020-09-05'], dtype='datetime64[ns]', freq=None)

返回的對象是一個DatetimeIndex。

還有一些更實用的方法來創造一系列的時間數據。

9. 用todatetime和totimedelta創建時間序列

可以通過將TimedeltaIndex添加到時間戳中來創建DatetimeIndex。

pd.to_datetime('10-9-2020') + pd.to_timedelta(np.arange(5), 'D')

「D」用來表示「day」,但是也有很多其他的選擇。你可以在這裡查看整個列表。

10. date_range函數

它提供了一種更靈活的創建DatetimeIndex的方法。

pd.date_range(start='2020-01-10', periods=10, freq='M')

參數的作用是:指定索引中的項數。freq 是頻率,「M」表示一個月的最後一天。

就freq參數而言,date_range非常靈活。

pd.date_range(start='2020-01-10', periods=10, freq='6D')

我們創建了一個頻率為6天的數據。

11. period_range函數

它返回一個PeriodIndex。語法類似於date_range函數。

pd.period_range('2018', periods=10, freq='M')

12. timedelta_range函數

它返回一個TimedeltaIndex。

pd.timedelta_range(start='0', periods=24, freq='H')

13.時區

默認情況下,Panda的時間序列對象沒有指定的時區。

dates = pd.date_range('2019-01-01','2019-01-10')dates.tz is NoneTrue

我們可以使用tz_localize方法為這些對象分配時區。

dates_lcz = dates.tz_localize('Europe/Berlin')dates_lcz.tz<DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>

14. 創建一個具有指定時區的時間序列

我們還可以使用tz關鍵字參數創建帶有時區的時間序列對象。

pd.date_range('2020-01-01', periods = 5, freq = 'D', tz='US/Eastern')

15. 偏移量

假設我們有一個時間序列索引,並且想為所有的日期偏移一個特定的時間。

A = pd.date_range('2020-01-01', periods=10, freq='D')A

讓我們給這個數據加上一周的偏移。

A + pd.offsets.Week()

16. 移動時間序列數據

時間序列數據分析可能需要移數據點進行比較。移位函數可以移位數據。

A.shift(10, freq='M')

17. Shift vs tshift

移動:移動數據tshift:移動時間索引讓我們創建一個帶有時間序列索引的dataframe,並繪製它以查看shift和tshift之間的區別。

dates = pd.date_range('2020-03-01', periods=30, freq='D')values = np.random.randint(10, size=30)df = pd.DataFrame({'values':values}, index=dates)df.head()

讓我們把原始的時間序列和移位的時間序列一起畫出來。

import matplotlib.pyplot as pltfig, axs = plt.subplots(nrows=3, figsize=(10,6), sharey=True)plt.tight_layout(pad=4)df.plot(ax=axs[0], legend=None)df.shift(10).plot(ax=axs[1], legend=None)df.tshift(10).plot(ax=axs[2], legend=None)

18. 用取樣函數重新採樣

時間序列數據的另一個常見操作是重採樣。根據任務的不同,我們可能需要以更高或更低的頻率重新採樣數據。

Resample創建指定內部的組(或容器),並允許您對組進行合併。

讓我們創建一個包含30個值和一個時間序列索引的Panda系列。

A = pd.date_range('2020-01-01', periods=30, freq='D')values = np.random.randint(10, size=30)S = pd.Series(values, index=A)

以下將返回3天時間內的平均值。

S.resample('3D').mean()

在某些情況下,我們可能對特定頻率的值感興趣。函數返回指定間隔結束時的值。例如,在上一步創建的系列中,我們可能只需要每3天(而不是平均3天)一次的值。

S.asfreq('3D')

20.滾動

滾動對於時間序列數據是一種非常有用的操作。滾動意味著創建一個具有指定大小的滾動窗口,並對該窗口中的數據執行計算,當然,該窗口將滾動數據。下圖解釋了滾動的概念。

值得注意的是,計算開始時整個窗口都在數據中。換句話說,如果窗口的大小為3,那麼第一次合併將在第三行進行。

讓我們為我們的數據應用一個3天的滾動窗口。

S.rolling(3).mean()[:10]

結論

我們已經全面介紹了用Pandas進行時間序列分析。值得注意的是,Pandas提供了更多的時間序列分析。

感謝您的閱讀。如果你有任何反饋,請告訴我。

作者:Soner Yldrm

deephub翻譯組:孟翔傑

相關焦點

  • 使用Pandas的resample函數處理時間序列數據的技巧
    時間序列數據在數據科學項目中很常見。 通常,可能會對將時序數據重新採樣到要分析數據的頻率或從數據中汲取更多見解的頻率感興趣。在本文中,我們將介紹一些使用Pandas resample()函數對時間序列數據進行重採樣的示例。 我們將介紹以下常見問題,並應幫助您開始使用時序數據操作。
  • python時間序列分析之_用pandas中的rolling函數計算時間窗口數據
    上篇文章中,我們講解了如何對時間數據進行重採樣及重採樣中降採樣和升採樣的概覽和使用方法,通過重採樣我們可以得到任何想要頻率的數據,但是這些數據也是一個時點的數據,那麼就存在這樣一個問題:時點的數據波動較大,某一點的數據不能很好的表現它本身的特性,於是我們就想,能否用一個區間的的數據去表現呢,這樣數據的準確性是不是更好一些呢?
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
  • 20個Pandas函數詳解
    Pandas是一個python數據分析庫。它提供了許多函數和方法來加快數據分析過程。pandas之所以如此普遍,是因為它具有強大的功能,以及他簡單的語法和靈活性。在這篇文章中,我將舉例來解釋20個常用的pandas函數。有些是很常見的,我敢肯定你以前用過。有些對你來說可能是新的。所有函數都將為你的數據分析過程增加價值。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    numpy的基本的東西我們學習差不多了,後面具體應用中遇到問題具體分析,然後去深入了解遇到的新的知識點就行。現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • 懂Excel就能輕鬆入門Python數據分析包pandas(十六):合併數據
    此系列文章收錄在公眾號中:數據大宇宙 > 數據處理 >E-pd經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言本系列上一節說了拆分數據的案例,這次自然是說下怎麼合併數據。
  • 特徵工程自動化 時間序列的數據是關鍵
    【IT168 資訊】今天介紹一個通用框架,用於開發時間序列模型,生成特徵並對數據進行預處理,並探索使這一過程自動化的潛力,以便將先進的機器學習算法應用於幾乎所有的時間序列問題。目前大多數機器學習算法都不具有時間意識,不容易應用於時間序列和預測問題。
  • 6個冷門但實用的pandas知識點
    作為開展數據分析的利器,蘊含了與數據處理相關的豐富多樣的API,使得我們可以靈活方便地對數據進行各種加工,但很多中的實用方法其實很多人都不熟悉,今天就來給大家介紹6個不太為人們所熟知的實用小技巧。
  • 懂Excel就能輕鬆入門Python數據分析包pandas(七):分列
    經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言今天從兩個需求來看看數據分列功能,由於 Excel 自帶功能比較弱,在處理稍微複雜的需求時會顯得力不從心,因此,本系列文章將引入 Excel 中一個非常高效的數據處理插件—— Power Query,並且看看 pandas 是怎樣靈活解決。
  • Pandas的介紹與基本使用
    如果說沒有pandas的出現,目前的金融數據分析領域還應該是R語言的天下。2、Pandas能幹什麼Pandas的主要功能:具備對應其功能的數據結構DataFrame,Series集成時間序列功能提供豐富的數學運算和操作靈活處理缺失數據.....以上就是pandas能完成的一些基礎操作,當然並不完全,下面就來看看pandas到底是怎麼用的。
  • 使用pandas和openpyxl處理複雜Excel數據
    關於Excel數據處理,很多同學可能使用過Pyhton的pandas模塊,用它可以輕鬆地讀取和轉換Excel數據。但是實際中Excel表格結構可能比較雜亂,數據會分散不同的工作表中,而且在表格中分布很亂,這種情況下啊直接使用pandas就會非常吃力。本文蟲蟲給大家介紹使用pandas和openpyxl讀取這樣的數據的方法。
  • 5個可以幫助pandas進行數據預處理的可視化圖表
    數據科學行業中一個最常見的陷阱是花費數小時為他們的項目尋找最佳算法,而沒有花足夠的時間首先理解數據。 在現實生活中,從多個來源收集到的大多數時間數據都有空白值、打字錯誤和其他異常。在進行任何數據分析之前,清除數據是至關重要的。 在本文中,我將討論五個強大的數據可視化選項,它們可以立即提供數據特徵的感覺。即使在正式建模或假設測試任務之前,執行EDA就可以傳達大量關於數據和特徵之間關係的信息。
  • 教程| pandas輕鬆入門 之 數據結構介紹 1
    訪問flyai.club,一鍵創建你的人工智慧項目Pandas含有使數據清洗和分析工作變得更快更簡單的數據結構和操作工具。pandas經常和其它工具一同使用,如數值計算工具NumPy和SciPy,分析庫statsmodels和scikit-learn,和數據可視化庫matplotlib。
  • 如何通過一頓飯來說明NumPy與pandas的功用
    而對於後者,經過合理的優化,Python處理幾個G的數據綽綽有餘,至於幾十G也勉強可以,而上百G的數據這就算是Hadoop與Spark系列的任務,不是Python的NumPy與pandas可以應付的,也不是R語言某個第三方包可以處理的。
  • pandas庫中最重要的幾個知識點
    前言本篇是【機器學習與數據挖掘】頭條號原創首發Python數據分析系列文章的第四篇Python數據分析系列文章之Python基礎篇Python數據分析系列文章之NumpyPython數據分析系列文章之Pandas(上)Python數據分析系列文章之Pandas(下)Python數據分析系列文章之ScipyPython數據分析系列文章之MatplotlibPython
  • Pandas自動進行探索性數據分析,節省可視化和理解數據的時間
    根據Wikipedia的說法,探索性數據分析(EDA)是一種分析數據集以總結其主要特徵的方法,通常使用視覺方法。因此,EDA是理解基礎數據,變量分布及其相關性的過程。這使得EDA成為構建任何統計模型之前任何數據科學過程中的第一步。
  • 數據挖掘:Pandas時間模塊管理!
    >print(ts1)print("")ts2 = pd.Timestamp("20171021")print(ts2)2020-06-01 14:28:08.6560562020-06-01 14:28:08.6560562017-10-21 00:00:00pd.to_datetime 多個時間數據轉換成時間戳索引
  • 提高數據處理效率,一行代碼開啟Pandas四倍速!
    快來了解新庫Modin,可以分割pandas的計算量,提高數據處理效率,一行代碼即刻開啟Pandas四倍速。首先了解一些基礎知識:Pandas作為Python中用於處理數據的庫,能簡單且靈活地處理不同種類、大小的數據。除此之外,Pandas還有許多函數有助於輕鬆處理不同數據。
  • pandas指南:做更高效的數據科學家
    今天我要告訴你們的是:在數據科學中,有一個軟體包是你們絕對需要學習的,那就是pandas。而pandas真正有趣的地方是,很多其他的包也在裡面。pandas是一個核心包,因此它具有來自其他各種包的特性。pandas類似於Python中的Excel:它使用表(即DataFrame)並對數據進行轉換,但它還能做更多。