【pandas基礎】--日期處理

来源:https://www.cnblogs.com/wang_yb/archive/2023/06/02/17451858.html
-Advertisement-
Play Games

時間序列數據是數據分析中一類常見且重要的數據。 它們按照時間順序記錄,通常是從某些現象的觀察中收集的,比如經濟指標、氣象數據、股票價格、銷售數據等等。 時間序列數據的特點是有規律地隨著時間變化而變化,它們的變化趨勢可以被分析和預測。時間序列分析是一種用於預測未來值或評估過去值的統計方法,常常被用於預 ...


時間序列數據是數據分析中一類常見且重要的數據。
它們按照時間順序記錄,通常是從某些現象的觀察中收集的,比如經濟指標、氣象數據、股票價格、銷售數據等等。

時間序列數據的特點是有規律地隨著時間變化而變化,它們的變化趨勢可以被分析和預測。時間序列分析是一種用於預測未來值或評估過去值的統計方法,常常被用於預測未來趨勢、季節性變化、周期性變化、隨機波動等。

1. 日期類型

原始數據中,日期一般會存儲為各種類型字元串,比如:

  • 2022/5/1
  • 2022-05-02
  • 3/5/2022

將其統一轉換為pandas的日期類型,後續統計分析時,不僅方便計算,還可以有效避免應對各種格式帶來的麻煩。

1.1 轉換為日期類型

pandasto_datetime函數對於數據集中各類日期字元串都能有效的轉換。

df = pd.DataFrame(
    {
        "日期": ["2022/5/1", "2022-05-02", "3/5/2022"],
        "城市": ["合肥", "合肥", "合肥"],
        "平均氣溫": [28, 31, 27],
    },
)

print(df)
print(df.dtypes)

image.pngimage.png

可以看出,預設的日期是字元串類型且格式混亂。
轉換後:

df["日期"] = pd.to_datetime(df["日期"])
print(df)
print(df.dtypes)

image.pngimage.png
日期顯示起來格式統一了,類型也變為了datetime64[ns]

1.2 生成日期序列

除了將數據集讀取來的日期字元串轉換為日期類型,我們也可以生成日期序列,這些生成的日期序列可以作為的數據索引,也可以用來補充數據集中缺失的日期值。

df = pd.DataFrame()
df["年"] = pd.date_range('2020-01-01', periods=3, freq='Y')
df["月"] = pd.date_range('2020-01-01', periods=3, freq='M')
df["日"] = pd.date_range('2020-01-01', periods=3, freq='D')
df["周"] = pd.date_range('2020-01-01', periods=3, freq='W')
df["季度"] = pd.date_range('2020-01-01', periods=3, freq='Q')
df

image.png
上面的示例分別以季度為間隔,生成3條連續的時間序列。

1.3 修改日期

修改日期的值,也是利用日期類型自帶的方法,不用像修改字元串那樣修改,那樣極易出錯。

df = pd.DataFrame()
d = pd.date_range('2020-01-01', periods=3, freq='D')
df["原始日期"] = d
df["延遲三天"] = d.shift(3, freq="D")
df["提前三天"] = d.shift(-3, freq="D")
df

image.png
這裡是按調整的,如果要按照季度等調整,像上一個例子那樣設置freq參數即可。

2. 日期屬性

將數據轉換為pandas日期類型的最大好處就是可以使用日期類型特有的屬性,方便進行各個維度的分析。

常用的日期維度是年,月,日,周,季度。

2.1 年

利用日期屬性按年份統計合計值:

df = pd.DataFrame(
    {
        "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
        "平均氣溫": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["年"] = df["日期"].dt.year
print(df)
print(df.groupby(df["年"]).sum())

image.png
兩個2021年的數據統計了合計值。

2.2 月

按月統計合計值:

df = pd.DataFrame(
    {
        "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
        "平均氣溫": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["月"] = df["日期"].dt.month
print(df)
print(df.groupby(df["月"]).sum())

image.png
兩個5月份的數據統計了合計值。

2.3 日

按日統計合計值:

df = pd.DataFrame(
    {
        "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
        "平均氣溫": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["日"] = df["日期"].dt.day
print(df)
print(df.groupby(df["日"]).sum())

image.png
兩個1號的數據統計了合計值。

2.4 周

按周統計合計值:

df = pd.DataFrame(
    {
        "日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
        "平均氣溫": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["周"] = df["日期"].dt.isocalendar().week
print(df)
print(df.groupby(df["周"]).sum())

image.png
上面兩個日期同屬於第22周,所以計算了合計值。
獲取周屬性與前面略有不同,不是直接獲取week,而是用isocalendar().week

2.5 季度

按季度統計合計值:

df = pd.DataFrame(
    {
        "日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
        "平均氣溫": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["季度"] = df["日期"].dt.quarter
print(df)
print(df.groupby(df["季度"]).sum())

image.png
上面3個日期都是第二季度,所以計算了合計值。

3. 總結回顧

本篇特意將pandas中的日期類型單獨介紹,
一方面是因為日期類型與其他類型相比,多出了很多特有的屬性;
另一方面,時間序列數據和回歸分析中也會大量用到日期類型。

這裡介紹了日期類型的轉換方法和常用屬性,但日期類型不僅僅限於這些屬性,其他的屬性可以參考pandas的官方文檔:Index objects — pandas 2.0.1 documentation


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # Rust Web 全棧開發之增加教師管理功能 ## 增加教師管理功能 ### 目標 #### Actix HTTP Server #### Actix App - Routes - GET /teachers - GET / teachers /{teacher_id} - POST /teac ...
  • ## 教程簡介 Google Charts 是一個純粹的基於JavaScript的圖表庫,旨在通過添加互動式圖表功能來增強Web應用程式.它支持各種圖表.在Chrome,Firefox,Safari,Internet Explorer(IE)等標準瀏覽器中使用SVG繪製圖表.在傳統的IE 6中,VM ...
  • ## 教程簡介 Excel是辦公室自動化中非常重要的一款軟體,Excel函數則是Excel中的內置函數。Excel函數共包含11類,分別是資料庫函數、日期與時間函數、工程函數、財務函數、信息函數、邏輯函數、查詢和引用函數、數學和三角函數、統計函數、文本函數以及用戶自定義函數。 熟練且高效的使用Exc ...
  • 前端組件 <hd-flex> <el-dialog v-model="isUploadDialog" width="50%" lock-scroll=false> <el-upload class="upload-demo" drag :action="url" :on-success="succe ...
  • 基於java的酒店管理系統設計與實現,酒店訂票系統,酒店預訂系統,酒店信息管理系統,app訂房系統設計與實現; ...
  • 本章將繼續探索內核中解析PE文件的相關內容,PE文件中FOA與VA,RVA之間的轉換也是很重要的,所謂的FOA是文件中的地址,VA則是記憶體裝入後的虛擬地址,RVA是記憶體基址與當前地址的相對偏移,本章還是需要用到`《驅動開發:內核解析PE結構導出表》`中所封裝的`KernelMapFile()`映射函... ...
  • 一致性哈希演算法是1997年由麻省理工的幾位學者提出的用於解決分散式緩存中的熱點問題。大家有沒有發現,我們之前介紹的例如快排之類的演算法是更早的六七十年代,此時分散式還沒有發展起來,大家往往還在提高單機性能。但是九十年代開始,逐漸需要用分散式集群來解決大型問題,相應的演算法研究也就應運而生。在說到一致性哈 ...
  • # 1.數值列表 列表非常適合用於存儲數字集合,而python提供了很多工具,可幫助我們高速地處理數字列表。 ## 1.1 range函數 python的range函數能夠輕鬆的生成連續一系列數字。 其語法格式:range(第一個數值,第二個數值) 編寫程式如下所示 ![image](https:/ ...
一周排行
    -Advertisement-
    Play Games
  • 當使用Autofac處理一個介面有多個實現的情況時,通常會使用鍵(key)進行區分或者通過IIndex索引註入,也可以通過IEnumerable集合獲取所有實例,以下是一個具體的例子,演示如何在Autofac中註冊多個實現,並通過構造函數註入獲取指定實現。 首先,確保你已經安裝了Autofac Nu ...
  • 本篇將分享Prometheus+Grafana的監控平臺搭建,並監控之前文章所搭建的主機&服務,分享日常使用的一些使用經驗本篇將配置常用服務的監控與面板配置:包括 MySQL,MongoDB,CLickHouse,Redis,RabbitMQ,Linux,Windows,Nginx,站點訪問監控,已... ...
  • 使用Aspirate可以將Aspire程式部署到Kubernetes 集群 工具安裝 dotnet tool install -g aspirate --prerelease 註意:Aspirate 正在開發中,該軟體包將作為預覽版進行版本控制,--prelease 選項將獲得最新的預覽版。 容器註 ...
  • 前言 本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。 是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇: 小公司,人員不多,利潤不高,創業階段能省則省 個人開發者,接 ...
  • 在.NET中,Microsoft.Extensions.Logging是一個靈活的日誌庫,它允許你將日誌信息記錄到各種不同的目標,包括資料庫。在這個示例中,我將詳細介紹如何使用Microsoft.Extensions.Logging將日誌保存到MySQL資料庫。我們將使用Entity Framewo ...
  • chatgpt介面開發筆記3: 語音識別介面 1.文本轉語音 1、瞭解介面參數 介面地址: POST https://api.openai.com/v1/audio/speech 下麵是介面文檔描述內容: 參數: { "model": "tts-1", "input": "你好,我是饒坤,我是ter ...
  • 前面兩篇文章主要是介紹瞭如何解決高併發情況下資源爭奪的問題。但是現實的應用場景中除了要解決資源爭奪問題,高併發的情況還需要解決更多問題,比如快速處理業務數據等, 本篇文章簡要羅列一下與之相關的更多技術細節。 1、非同步編程:使用async和await關鍵字進行非同步編程,這可以避免阻塞線程,提高程式的響 ...
  • 大家好,我是棧長。 Nacos 2.3.0 前幾天正式發佈了,新增了不少實用性的新功能,真是史上最強版本。 Nacos 2.3.0 還真是一個比較重要的大版本,因為它涉及了太多重大更新,今天棧長給大家來解讀下。 Nacos 先掃個盲: Nacos 一個用於構建雲原生應用的動態服務發現、配置管理和服務 ...
  • IDEA的遠程開發功能,可以將本地的編譯、構建、調試、運行等工作都放在遠程伺服器上執行,而本地僅運行客戶端軟體進行常規的開發操作即可,舊版本IDEA目前不支持該功能.,本例使用的是IDEA2023.2.5版本 下麵介紹如何在IDEA中設置遠程連接伺服器開發環境並結合Cpolar內網穿透工具實現無公網 ...
  • 本文解釋為啥會有響應式編程,為什麼它在開發者中不太受歡迎,以及引入 Java 虛擬線程後它可能最終會消失。 命令式風格編程一直深受開發者喜愛,如 if-then-else、while 迴圈、函數和代碼塊等結構使代碼易理解、調試,異常易追蹤。然而,像所有好的東西一樣,通常也有問題。這種編程風格導致線程 ...