使用Pandas的resample函數處理時間序列數據的技巧

2021-01-11 deephub

時間序列數據在數據科學項目中很常見。 通常,可能會對將時序數據重新採樣到要分析數據的頻率或從數據中汲取更多見解的頻率感興趣。

在本文中,我們將介紹一些使用Pandas resample()函數對時間序列數據進行重採樣的示例。 我們將介紹以下常見問題,並應幫助您開始使用時序數據操作。

下採樣並執行聚合使用自定義基數進行下採樣上採樣和填充值一個實際的例子

向下採樣和執行聚合

下採樣是將一個時間序列數據集重新採樣到一個更大的時間框架。例如,從幾分鐘到幾小時,從幾天到幾年。結果的行數將減少,並且可以使用mean()、min()、max()、sum()等聚合值。

讓我們通過一個示例來了解它是如何工作的。

假設我們有一個關於銷售的數據集。

df_sales = pd.read_csv('sales_data.csv', parse_dates=['date'], index_col=['date'])

要獲得每2小時添加的總銷售額,只需使用resample()將DataFrame向下採樣到2小時的容器中,並將落入容器中的時間戳的值相加。

df_sales.resample('2H').sum()

要執行多個聚合,我們可以向agg()方法傳遞一個聚合函數列表。

df_sales.resample('2H').agg(['min','max', 'sum'])

使用自定義基數向下採樣

默認情況下,對於平均細分為1天/月/年的頻率,聚合間隔的「原點」默認為0。所以2H頻率的結果範圍是00:00:00,02:00:00,04:00:00,…,22:00:00。

對於我們正在使用的銷售數據,第一個記錄的日期值為2017-01-02 09:02:03,因此將輸出範圍從09:00:00開始比從08:00開始更有意義。為此,我們可以使用參數base將聚合間隔的「原點」設置為不同的值,例如,set base=1,這樣結果範圍就可以從09:00:00開始。

df_sales.resample('2H', base=1).sum()

上採樣和填充值

上採樣是下採樣的相反操作。它將時間序列數據重新採樣到一個更小的時間框架。例如,從小時到分鐘,從年到天。結果將增加行數,並且附加的行值默認為NaN。內置的方法ffill()和bfill()通常用於執行前向填充或後向填充來替代NaN。

讓我們為演示創建一個DataFrame。

df = pd.DataFrame({ 'value': [1, 2, 3] }, index=pd.period_range( '2012-01-01', freq='A', periods=3 ))

按季度重新採樣一年並向前填充值。前向填充方法ffill()將使用最後一個已知值來替換NaN。

df.resample('Q').ffill()

按季度重新採樣一年並向後填充值。向後填充方法bfill()將使用下一個已知值來替換NaN。

df.resample('Q').bfill()

一個實際的例子

讓我們看看如何使用Pandas resample()來處理一個現實世界的問題。

假設我們有兩個數據集,一個是月銷售額dfsales,另一個是價格dfprice。df_price只有關於價格變化的記錄。

我們想計算一下每個月的銷售總額,下面是預期的產量。

這個計算中比較困難的部分是,我們需要檢索每個月的價格,並將其合併到數據中,以便計算總價格。

一種簡潔的解決方案是使用Pandas的resample()函數。一行代碼可以檢索每個月的價格。

步驟1:按月重新取樣價格數據集,並向前填充值

df_price = df_price.resample('M').ffill()

通過調用resample('M')來按月重新採樣給定的時間序列。在此之後,調用ffill()來轉發填充值。你是不是有點困惑?查看下面的圖片了解細節。

步驟2:結合結果並計算總銷售額

df = pd.concat([df_sales, df_price], axis = 1)df['total_sales'] = df['num_sold'] * df['price']

使用參數axis=1的Pandas concat()函數水平組合dfsales和dfprice。在此之後,可以使用元素方面的乘法df['num_sold'] * df['price']來計算總銷售額。

通過執行上述語句,您應該得到如下輸出:

結論

Pandas resample()函數是一個簡單、強大、高效的函數,用於在頻率轉換期間執行重採樣操作。

我希望本文能幫助您節省分析時間序列數據的時間。我建議您查看resample() API的文檔,了解您可以做的其他事情。

感謝你的閱讀。如果您對機器學習的實踐方面感興趣,請查看筆記本以獲取原始碼,請繼續關注。

github/BindiChen/machine-learning/blob/master/data-analysis/020-pandas-resample/pandas-resample.ipynb

作者:B. Chen

deephub翻譯組

相關焦點

  • Pandas處理時間序列數據的20個關鍵知識點
    舉幾個例子:一段時間內的股票價格每天,每周,每月的銷售額流程中的周期性度量一段時間內的電力或天然氣消耗率在這篇文章中,我將列出20個要點,幫助你全面理解如何用Pandas處理時間序列數據。1.不同形式的時間序列數據時間序列數據可以是特定日期、持續時間或固定的自定義間隔的形式。時間戳可以是給定日期的一天或一秒,具體取決於精度。
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • python時間序列分析之_用pandas中的rolling函數計算時間窗口數據
    上篇文章中,我們講解了如何對時間數據進行重採樣及重採樣中降採樣和升採樣的概覽和使用方法,通過重採樣我們可以得到任何想要頻率的數據,但是這些數據也是一個時點的數據,那麼就存在這樣一個問題:時點的數據波動較大,某一點的數據不能很好的表現它本身的特性,於是我們就想,能否用一個區間的的數據去表現呢,這樣數據的準確性是不是更好一些呢?
  • Pandas的介紹與基本使用
    1、什麼是Pandas當大家談論到數據分析時,提及最多的語言就是Python和SQL,而Python之所以適合做數據分析,就是因為他有很多強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成為使用最廣泛而且強大的數據分析環境之一。
  • pandas使用的25個技巧
    查詢pandas版本  如果你還想知道pandas所依賴的模塊的版本,你可以使用show_versions()函數:使用astype()函數將數據類型轉換成數值型但是,如果你對第三列也使用這個函數,將會引起錯誤,這是因為這一列包含了破折號(用來表示0)但是pandas並不知道如何處理它。
  • 使用pandas和openpyxl處理複雜Excel數據
    關於Excel數據處理,很多同學可能使用過Pyhton的pandas模塊,用它可以輕鬆地讀取和轉換Excel數據。但是實際中Excel表格結構可能比較雜亂,數據會分散不同的工作表中,而且在表格中分布很亂,這種情況下啊直接使用pandas就會非常吃力。本文蟲蟲給大家介紹使用pandas和openpyxl讀取這樣的數據的方法。
  • 20個Pandas函數詳解
    Pandas是一個python數據分析庫。它提供了許多函數和方法來加快數據分析過程。pandas之所以如此普遍,是因為它具有強大的功能,以及他簡單的語法和靈活性。在這篇文章中,我將舉例來解釋20個常用的pandas函數。有些是很常見的,我敢肯定你以前用過。有些對你來說可能是新的。所有函數都將為你的數據分析過程增加價值。
  • Python中的時間序列數據可視化的完整指南
    時間序列數據在許多不同的行業中都非常重要。它在研究、金融行業、製藥、社交媒體、網絡服務等領域尤為重要。對時間序列數據的分析也變得越來越重要。在分析中有什麼比一些好的可視化效果更好呢?沒有一些視覺效果,任何類型的數據分析都是不完整的。因為一個好的情節比20頁的報告更能讓你理解。因此,本文是關於時間序列數據可視化的。
  • 懂Excel輕鬆入門Python數據分析包pandas(二十七):IF函數代替者
    此系列文章收錄在:數據大宇宙 > 數據處理 > E-pd轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。
  • Pandas的函數應用及映射方法
    CDA數據分析師 出品在數據分析師日常的數據清洗工作中,經常需要對數據進行各種映射變換,通過Pandas可以非常方便地解決此問題,其提供了map()、apply()、mapapply()等方法,下面將一一詳細介紹這三個映射函數的用法及三者的區別。
  • 如何通過一頓飯來說明NumPy與pandas的功用
    pandas 這個名稱來源於panel data(面板數據),從而可見其要處理的數據是多維度的而非單維度。pandas 含有使數據清洗和分析工作變得更快更簡單的數據結構與操作工具。經常是和其他工具一起使用,如數值計算工具NumPy和SciPy,分析庫statsmodels與scikit-learn,以及數據可視化庫matplotlib。
  • 用Pandas演示tips的小技巧,學到了嗎?
    全文共1042字,預計學習時長5分鐘Pandas在數據分析中的重要作用不必多言。不管是Confluence上的一篇文章、GitHub中Readme文檔,抑或一篇科學論文,每個項目都會以報告之類來收尾。使用Pandas,就不必再將數據幀(DataFrame)裡的值逐一複製到另一個軟體中,它的格式化函數能夠將數據幀轉換成多種格式。
  • 懂Excel就能輕鬆入門Python數據分析包pandas(七):分列
    經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas前言今天從兩個需求來看看數據分列功能,由於 Excel 自帶功能比較弱,在處理稍微複雜的需求時會顯得力不從心,因此,本系列文章將引入 Excel 中一個非常高效的數據處理插件—— Power Query,並且看看 pandas 是怎樣靈活解決。
  • 提高數據處理效率,一行代碼開啟Pandas四倍速!
    快來了解新庫Modin,可以分割pandas的計算量,提高數據處理效率,一行代碼即刻開啟Pandas四倍速。首先了解一些基礎知識:Pandas作為Python中用於處理數據的庫,能簡單且靈活地處理不同種類、大小的數據。除此之外,Pandas還有許多函數有助於輕鬆處理不同數據。
  • pandas指南:做更高效的數據科學家
    今天我要告訴你們的是:在數據科學中,有一個軟體包是你們絕對需要學習的,那就是pandas。而pandas真正有趣的地方是,很多其他的包也在裡面。pandas是一個核心包,因此它具有來自其他各種包的特性。pandas類似於Python中的Excel:它使用表(即DataFrame)並對數據進行轉換,但它還能做更多。
  • pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
    人們經常用pandas處理表格型數據,時常需要讀入excel表格數據,很多人一般都是直接這麼用:pd.read_excel(「文件路徑文件名」),再多一點的設置可能是轉義一下路徑中的斜槓,一旦原始的excel表不是很規整,這樣簡單讀入勢必報錯!
  • Python數據分析利器,Pandas入門介紹,幫你便捷高效處理複雜數據
    關於Python的數據分析,當我們遇到的數據量小、數據結構簡單時,可以通過字典、列表等Python常見的數據結構來處理。但是當我們面對的大量數據以及複雜數據的局面時,就需要用一些專門用於數據分析的擴展庫來處理數據了。今天給大家介紹一個Python裡專門用來做數據分析和處理的擴展庫。
  • 圖解四個實用的pandas函數!
    作者:Baijayanta Roy來源:towardsdatascience編譯&內容補充:早起Python在用python進行機器學習或者日常的數據處理中,pandas是最常用的Python庫之一,熟練掌握pandas是每一個數據科學家的必備技能,本文將用代碼+圖片詳解Pandas中的四個實用函數!
  • Pandas自動進行探索性數據分析,節省可視化和理解數據的時間
    根據Wikipedia的說法,探索性數據分析(EDA)是一種分析數據集以總結其主要特徵的方法,通常使用視覺方法。因此,EDA是理解基礎數據,變量分布及其相關性的過程。這使得EDA成為構建任何統計模型之前任何數據科學過程中的第一步。
  • 6個提升效率的pandas小技巧
    pandas是python中常用的數據分析庫,出現頻率非常高,而且pandas功能之多讓人咋舌,即使pandas老手也沒法保證能高效使用pandas做數據分析。這篇文章目的梳理幾個高效實用的pandas小技巧,供大家參考。1.