時間類型數據處理:基于Python的datetime庫和pandas庫

一、datetime庫常用方法

日期的數據類型主要有兩種:一是包含時間的datetime類型,二是不包含時間的date類型。這里的時間指具體的時、分、秒、甚至毫秒。

1、自定義日期、時間、獲取本地時間、獲取本地日期、獲取年份、月份、月號、小時、分鐘、秒、星期幾

獲取日期和時間的不同部分:

  • 獲取年份:datetime.year
  • 獲取月份:datetime.month
  • 獲取月號:datetime.day
  • 獲取小時:datetime.hour
  • 獲取分鐘:datetime.minute
  • 獲取秒:datetime.second
  • 獲取微妙:datetime.microsecond
  • 獲取星期幾,返回 0(周一)到 6(周日):datetime.weekday()
from datetime import datetime, date# 自定義日期,形如 2022-02-20
date(2022, 2, 20)# 自定義日期和時間,形如2025-01-22 12:00:00
dt = datetime(2025, 1, 22, 12, 00, 00)# 獲取本地日期, 形如 2025-01-23
date.today()# 獲取本地日期和時間,形如 2025-01-23 23:36:15.461326
dt = datetime.now()
dt = datetime.today()  # 與datetime.now()相同# 獲取年份
dt.year# 獲取月份
dt.month# 獲取月號
dt.day# 獲取小時
dt.hour# 獲取分鐘
dt.minute# 獲取秒
dt.second# 獲取星期幾
dt.weekday()   # 返回0~6,表示周一到周日

2、日期的加減(包含時間或不包含時間):需要用到一個數據類型,timedelta(時間增量),表示時間間隔或者時間差,用于執行日期和時間的加減操作。

datetime類型時間的加減操作:

# 日期和時間(即datetime類型)的加減操作演示
from datetime import datetime, timedelta# 創建當前時間,datetime類型
now = datetime.now()# timedelta(days, weeks, hours, minutes, seconds): 創建一個timedelta對象,表示時間間隔
td = timedelta(days=5)# 計算5天后的時間
future = now + td    # 返回的是datetime類型# 計算日期差值
t = now - future   # 注意的是,兩個datetime格式只能相減,但相減返回值類型是timedelta類型
print("Difference:", t)   # 輸出 "-5 days, 0:00:00",即相差的天數# timedelta類型可以通過timedelta.days、timedelta.seconds等獲取特定的值
print("Days difference:", t.days)   # 獲取t的天數,輸出-5
# 其他可用屬性
print("Seconds:", t.seconds)   # 獲取t的秒數,輸出0

date類型的日期加減操作:?

# 日期(即date類型)的加減操作演示
from datetime import date, timedelta# 創建一個日期對象
today = date.today()
print("Today:", today)   # 輸出 Today: 2025-01-23# 創建一個timedelta對象,表示時間間隔
td = timedelta(days=5)# 計算5天后的日期
future_date = today + td
print("Future Date:", future_date)   # 輸出 Future Date: 2025-01-28# 計算5天前的日期
past_date = today - td
print("Past Date:", past_date)    # 輸出 Past Date: 2025-01-18# 兩個date類型也是只能相減,不能相加,相減得到一個timedelta類型時間增量
print(future_date - past_date)   # 輸出 10 days, 0:00:00

3、字符串轉日期時間、日期時間格式化輸出

常見的格式符號:

  • %Y:四位數的年份(例如 2023)
  • %m:兩位數的月份(例如 01 至 12)
  • %d:兩位數的日期(例如 01 至 31)
  • %H:小時(24小時制,00 至 23)
  • %M:分鐘(00 至 59)
  • %S:秒(00 至 59)
  • %f:微秒(000000 至 999999)
  • %a:簡短的星期幾(例如 Mon)
  • %A:完整的星期幾(例如 Monday)
from datetime import datetime# 將字符串轉日期時間
time = '2025-01-22 12:45:30'
dt = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
print(type(dt))  # <class 'datetime.datetime'>
print(dt)    # 輸出 2025-01-22 12:45:30# 將日期時間轉字符串
time_str = dt.strftime('%Y-%m-%d %H:%M:%S %A')
print(type(time_str))    # <class 'str'>
print(time_str)  # 2025-01-22 12:45:30 Wednesday

二、pands庫中常用于時間分析的方法

1、使用pd.to_datetime()轉換時間列

import pandas as pd# 創建包含日期字符串的 DataFrame
data = {'date': ['2023-01-01', '2023-01-02', '2023-01-03'],'value': [10, 15, 20]}df = pd.DataFrame(data)# 將 'date' 字符串列轉換為 datetime 類型
df['date'] = pd.to_datetime(df['date'])print(df)
# 輸出:
#      date       value
# 0 2023-01-01     10
# 1 2023-01-02     15
# 2 2023-01-03     20

2、使用pd.date_range()創建時間序列

date_range()常用參數說明:

  • start:必需參數,指定日期范圍的開始日期(字符串或datetime對象)
  • end:可選參數,指定日期范圍的結束日期(字符串或datetime對象)
  • periods:可選參數,指定生成的日期數量,而不是通過結束日期來確定結束
  • freq:可選參數,指定日期的頻率(默認頻率是'D',即每天),如天、小時、月等。

常見的頻率表示法有:

  • 'D':每天
  • 'B':工作日(周一到周五)
  • 'h':每小時
  • 'T''min':每分鐘
  • 's':每秒
  • 'MS':每月(每月初)
  • 'ME':每月(每月末)
  • 'QS':每季度(每季度初)
  • 'QE':每季度(每季度末)
  • 'YS':每年(每年末)
  • 'YE':每年(每年末)
  • 'W':每周(每周的周日)

示例:

import pandas as pd# 生成日期范圍,使用了end參數就不能用periods參數
dates = pd.date_range('2023-01-01', end='2023-01-03', freq='D')
print(dates)   # 輸出 DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03'])# 生成日期范圍,使用了periods參數就不能用end參數
dates = pd.date_range('2023-01-01', periods=3, freq='ME')
print(dates)   # 輸出 DatetimeIndex(['2023-01-31', '2023-02-28', '2023-03-31'])

3、使用df.set_index()和df.resample()進行重采樣

假設你有一個包含日期和數值的 DataFrame,現在你想按月重采樣并使用聚合函數計算每月的平均值:

# 創建包含日期和數值的 DataFrame
data = {'date': ['2023-01-01', '2023-01-15', '2023-02-01', '2023-02-15'],'value': [10, 20, 30, 40]}df = pd.DataFrame(data)# 將 'date' 列轉換為 datetime 類型并設置為索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)# 按月重采樣并計算平均值
df_resampled = df.resample('ME').mean()print(df_resampled)# 輸出:
#             value
# date             
# 2023-01-31   15.0     表示一月份的平均值
# 2023-02-28   35.0     表示二月份的平均值

4、使用df.rolling()計算移動平均

假設你有一個時間序列數據,你想計算3天的移動平均:

# 創建一個時間序列數據
data = {'date': pd.date_range('2023-01-01', periods=6, freq='D'),'value': [10, 20, 30, 40, 50, 60]}df = pd.DataFrame(data)
df.set_index('date', inplace=True)# 計算3天移動平均
df['rolling_mean'] = df['value'].rolling(window=3).mean()print(df)# 輸出:
#             value      rolling_mean
# date                           
# 2023-01-01     10           NaN
# 2023-01-02     20           NaN
# 2023-01-03     30          20.0
# 2023-01-04     40          30.0
# 2023-01-05     50          40.0
# 2023-01-06     60          50.0

5、使用df.diff()計算差值

假設你想計算每一天與前一天的差值(即變化量):

# 創建一個時間序列數據
data = {'date': pd.date_range('2023-01-01', periods=6, freq='D'),'value': [10, 20, 30, 40, 50, 60]}df = pd.DataFrame(data)
df.set_index('date', inplace=True)# 計算每日變化量
df['daily_change'] = df['value'].diff()print(df)# 輸出:
#               value     daily_change
# date                           
# 2023-01-01     10           NaN
# 2023-01-02     20          10.0
# 2023-01-03     30          10.0
# 2023-01-04     40          10.0
# 2023-01-05     50          10.0
# 2023-01-06     60          10.0

6、使用?df.between_time() 篩選時間范圍(無法篩選特定日期范圍數據)

假設你有一個包含日期時間的 DataFrame,現在你想篩選某一特定時間范圍內的數據:

# 創建包含日期時間數據的 DataFrame
data = {'datetime': pd.date_range('2023-01-01 08:00', periods=6, freq='h'),'value': [10, 20, 30, 40, 50, 60]}df = pd.DataFrame(data)
df.set_index('datetime', inplace=True)# 篩選 09:00 到 17:00 之間的數據
df_filtered = df.between_time('09:00', '17:00')print(df_filtered)
# 輸出:
#                        value
# datetime                  
# 2023-01-01 09:00:00     20
# 2023-01-01 10:00:00     30
# 2023-01-01 11:00:00     40
# 2023-01-01 12:00:00     50
# 2023-01-01 13:00:00     60

7、使用 .iloc 篩選特定日期范圍內的數據

# 創建包含日期時間數據的 DataFrame
data = {'datetime': pd.date_range('2023-01-01 08:00', periods=5, freq='ME'),'value': [10, 20, 30, 40, 50]}df = pd.DataFrame(data)
df.set_index('datetime', inplace=True)# 篩選特定日期范圍的數據
start_date = '2023-01-01'
end_date = '2023-10-02'df_filtered = df.loc[start_date:end_date]print(df_filtered)
# 輸出:
#                        value
# datetime                  
# 2023-01-31 08:00:00     10
# 2023-02-28 08:00:00     20
# 2023-03-31 08:00:00     30
# 2023-04-30 08:00:00     40
# 2023-05-31 08:00:00     50

# 文章如有錯誤,歡迎大家指正,我們下期文章見。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66874.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66874.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66874.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

低代碼可視化-轉盤小游戲可視化-代碼生成器

轉盤小程序是一種互動工具&#xff0c;它通過模擬真實的轉盤抽獎或決策體驗&#xff0c;為用戶提供了一種有趣且公平的選擇方式。以下是對轉盤小程序的詳細介紹&#xff1a; 轉盤小程序的應用場景 日常決策&#xff1a;轉盤小程序可以幫助用戶解決日常生活中的選擇困難問題&a…

MongoDB文檔查詢

一、實驗目的 1. 理解MongoDB文檔數據庫的基本概念和特性。 2. 掌握在MongoDB中創建集合和插入文檔數據的方法。 3. 學習使用MongoDB進行文檔查詢操作&#xff0c;包括查詢、過濾和排序等。 二、實驗環境準備 1. JAVA環境準備&#xff1a;確保Java Development Kit (J…

速通Docker === 使用最佳實踐總結

目錄 主要使用步驟 1. 命令 2. 網絡 3. 存儲 卷存儲&#xff08;Volumes&#xff09; 目錄掛載&#xff08;Bind Mounts&#xff09; 比較 4. 環境變量 5. 端口 示例&#xff1a;啟動 MySQL 容器 解釋&#xff1a; 總結 Docker 是一個開源的應用容器引擎&#xff0…

Postgresql源碼(140)理解PG的編譯流程(make、Makefile、Makefile.global.in)

PG16 PG中使用的makefile看起來代碼比較多&#xff0c;但是實際邏輯比較簡單&#xff0c;這里做一些抽象總結。 總結 Makefile.global.in的$(recurse)宏自動生成了target&#xff0c;可以方便的進入內存目錄進行編譯。 all: all-common-recurse all-common-recurse: submak…

c語言中的數組(上)

數組的概念 數組是?組相同類型元素的集合&#xff1b; 數組中存放的是1個或者多個數據&#xff0c;但是數組元素個數不能為0。 數組中存放的多個數據&#xff0c;類型是相同的。 數組分為?維數組和多維數組&#xff0c;多維數組?般?較多?的是?維數組。 數組創建 在C語言…

戴爾電腦設置u盤啟動_戴爾電腦設置u盤啟動多種方法

最近有很多網友問&#xff0c;戴爾臺式機怎么設置u盤啟動&#xff0c;特別是近兩年的戴爾臺式機比較復雜&#xff0c;有些網友不知道怎么設置&#xff0c;其實設置u盤啟動有兩種方法&#xff0c;下面小編教大家戴爾電腦設置u盤啟動方法。 戴爾電腦設置u盤啟動方法一、戴爾進入b…

2【選修】再探寶可夢、數碼寶貝分類器

1 Pokemon/Digimon Classifier 1.1 Observation 1.2 Function 1.3 Loss 1.4 Training Examples – OOPS what do we want? 2 What is the probability of sampling bad D t r a i n D_{train} Dtrain? 2.1 Theroy – Larger N N N smaller ∣ H ∣ |H| ∣H∣ 2.2…

微信小程序中實現背景圖片完全覆蓋顯示,可以通過設置CSS樣式來實現

wxml頁面代碼 <view class"beijing"></view>wxss樣式代碼 /* pages/beiJing/beiJing.wxss */ .beijing {background-image: url("https://www.qipa250.com/qipa.jpg");/* 定位&#xff1a;絕對定位 */position: absolute;/* 上下左右都定位到…

Mongodb 慢查詢日志分析 - 1

Mongodb 慢查詢日志分析 使用 mloginfo 處理過的日志會在控制臺輸出, 顯示還是比較友好的. 但是如果內容較大, 就不方便查看了, 如果可以導入到 excel 就比較方便篩選/排序. 但是 mloginfo 并沒有提供生成到 excel 的功能. 可以通過一個 python 腳本輔助生成: import pandas…

ASP.NET Core 6.0 如何處理丟失的 Startup.cs 文件

介紹 .NET 6.0 已經發布&#xff0c;ASP.NET Core 6.0 也已發布。其中有不少變化讓很多人感到困惑。例如&#xff0c;“誰動了我的奶酪”&#xff0c;它在哪里Startup.cs&#xff1f;在這篇文章中&#xff0c;我將深入研究這個問題&#xff0c;看看它移動到了哪里以及其他變化。…

歐幾里得算法求最小公倍數和最大公約數

一.最大公約數 gcd(a,b)gcd(b,a%b) 遞歸式,當且僅當b0&#xff0c;易得0和a的公約數為a.(可作為遞歸的出口) 證明&#xff1a; int gcd(int a, int b) {if (b 0) return a;else return gcd(b, a % b); } 二.最小公倍數 給定整數a b&#xff0c;求a b的最小公倍數 有圖可知…

文檔解析:PDF里的復雜表格、少線表格如何還原?

PDF中的復雜表格或少線表格還原通常需要借助專業的工具或在線服務&#xff0c;以下是一些可行的方法&#xff1a; 方法一&#xff1a;使用在線PDF轉換工具 方法二&#xff1a;使用桌面PDF編輯軟件 方法三&#xff1a;通過OCR技術提取表格 方法四&#xff1a;手動重建表格 …

局域網中 Windows 與 Mac 互相遠程連接的最佳方案

由于工作需要&#xff0c;經常需要遠程連接或登錄到幾臺不同的工作用機上進行操作。 下面基于免費、高體驗等基本訴求&#xff0c;簡要記錄幾種不同場景下的實踐方案選擇&#xff0c;僅供參考。如您有更簡單且更優的方案&#xff0c;歡迎一起探討。 1 遠程桌面連接的幾種不同…

二叉樹的所有路徑(力扣257)

因為題目要求路徑是從上到下的&#xff0c;所以最好采用前序遍歷。這樣可以保證按從上到下的順序將節點的值存入一個路徑數組中。另外&#xff0c;此題還有一個難點就是如何求得所有路徑。為了解決這個問題&#xff0c;我們需要用到回溯。回溯和遞歸不分家&#xff0c;每遞歸一…

Centos 修改歷史讀錄( HISTSIZE)

history命令 -c #清空命令歷史 -r #讀歷史文件附加到歷史列表 -w #保存歷史列表到指定的歷史文件 命令歷史相關環境變量 HISTSIZE #命令歷史記錄的條數 HISTFILE #指定歷史文件&#xff0c;默認為~/.bash_history HISTFILESIZE #命令歷史文件記錄歷史的條數 以上變量可以 exp…

【C++高并發服務器WebServer】-2:exec函數簇、進程控制

本文目錄 一、exec函數簇介紹二、exec函數簇 一、exec函數簇介紹 exec 函數族的作用是根據指定的文件名找到可執行文件&#xff0c;并用它來取代調用進程的內容&#xff0c;換句話說&#xff0c;就是在調用進程內部執行一個可執行文件。 exec函數族的函數執行成功后不會返回&…

TDengine 與上海電氣工業互聯網平臺完成兼容性認證

在工業數字化轉型和智能化升級的浪潮中&#xff0c;企業對高效、可靠的數據管理解決方案的需求日益增長。特別是在風電智能運維、火電遠程運維、機床售后服務等復雜多樣的工業場景下&#xff0c;如何實現海量設備和時序數據的高效管理&#xff0c;已經成為推動行業升級的關鍵。…

Jenkins pipline怎么設置定時跑腳本

目錄 示例&#xff1a;在Jenkins Pipeline中設置定時觸發 使用pipeline指令設置定時觸發 使用Declarative Pipeline設置定時觸發 使用Scripted Pipeline設置定時觸發 解釋Cron表達式 保存和應用配置 小結 在Jenkins中&#xff0c;定時跑腳本&#xff08;例如定時執行Pip…

kotlin的協程的基礎概念

Kotlin的協程是一種用于簡化異步編程的強大工具。 理解協程的基礎概念可以幫助開發者有效地利用其能力。 以下是Kotlin協程的一些關鍵基礎概念&#xff1a; 協程&#xff08;Coroutines&#xff09; &#xff1a; 協程是一種用于處理并發任務的編程模型&#xff0c;它可以在單…

machine learning knn算法之使用KNN對鳶尾花數據集進行分類

通過導入必要的scikit-learn導入必要的庫&#xff0c;加載給定的數據&#xff0c;劃分測試集和訓練集之后訓練預測和評估即可 具體代碼如下&#xff1a; import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split f…