Python中的Pandas?時間函數(shù)?time?、datetime?模塊和時間處理基礎(chǔ)講解
Python 中提供了對時間日期的多種多樣的處理方式,主要是在 time 和 datetime 這兩個模塊里。
一、time 模塊
- time 模塊不牽扯時區(qū)的問題,便于計算。
- (1) timestamp 時間戳,時間戳表示的是從 1970 年 1 月 1 日 00:00:00 開始按秒計算的偏移量。
- (2) struct_time 時間元組,共有九個元素組。
- (3) format time 格式化時間,已格式化的結(jié)構(gòu)使時間更具可讀性。包括自定義格式和固定格式。
1、時間格式轉(zhuǎn)換圖
- 主要 time 生成方法和 time 格式轉(zhuǎn)換方法實例如下:
- 首先,我們導(dǎo)入 time 模塊,便于我們后續(xù)的操作。
import time
然后,我們生成 timestamp ,他是一個浮點型數(shù)據(jù)。
time.time() #1676978808.2162082
將其轉(zhuǎn)化為整型數(shù)據(jù)。
int(time.time()) #1676978809
我們可以知道一個程序消耗的時間,通過設(shè)置程序開始時間和程序結(jié)束時間,中間執(zhí)行一個循環(huán)語句,這里以累加到 10000 為例。
start_time = time.time() s = "" for i in range(10000): s += str(i) ? end_time = time.time() ? print("程序消耗時間=",end_time-start_time) #程序消耗時間= 0.0039615631103515625
我們也可以通過 time 模塊調(diào)用本地時間,通過生成 struct_time 完成。
my_time = time.localtime() print(my_time) ? print(my_time.tm_year) print(my_time.tm_mon) print(my_time.tm_mday) #time.struct_time(tm_year=2023, tm_mon=2, tm_mday=21, tm_hour=19, tm_min=26, tm_sec=58, #tm_wday=1, tm_yday=52, tm_isdst=0) #2023 #2 #21
我們可以將 timsstamp 轉(zhuǎn)化為 struct_time。
time.localtime(1650177058) #time.struct_time(tm_year=2022, tm_mon=4, tm_mday=17, tm_hour=14, tm_min=30, tm_sec=58, #tm_wday=6, tm_yday=107, tm_isdst=0)
可以將格式化字符串輸入到 struct_time。
time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X') #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, #tm_wday=3, tm_yday=125, tm_isdst=-1)
我們也可以將格式化字符串時間反向轉(zhuǎn)變?yōu)槊腌姅?shù)。
time.mktime(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) #1304584626.0
- 我們可以生成 format_time,產(chǎn)生滿足我們格式要求的時間。
- 示例 1:
#struct_time to format_time time.strftime("%Y-%m-%d %X") time.strftime("%Y-%m-%d %X",time.localtime()) #time.strftime("%Y-%m-%d %X",time.localtime()) #'2023-02-21 19:27:05' #生成format_time
示例 2:
#struct_time to format_time time.strftime("%Y-%m-%d") #time.strftime("%Y-%m-%d %X",time.localtime()) #'2023-02-21'
示例 3:
#struct_time to format_time time.strftime("%m-%d-%Y") #time.strftime("%Y-%m-%d %X",time.localtime()) #'02-21-2023'
2. struct_time 元組元素結(jié)構(gòu)
其具體元素結(jié)構(gòu)可見下述表格。
屬性 | 值 |
---|---|
tm_year(年) | xxxx 年,比如 2011 |
tm_mon(月) | 1 - 12 |
tm_mday(日) | 1 - 31 |
tm_hour(時) | 0 - 23 |
tm_min(分) | 0 - 59 |
tm_sec(秒) | 0 - 61 |
tm_wday(weekday) | 0 - 6(0表示周日) |
tm_yday(一年中的第幾天) | 1 - 366 |
tm_isdst(是否是夏令時) | 默認(rèn)為-1 |
- 其具體如下作用:
- (1) 取得時間戳/時間格式的字符串中對應(yīng)的年/月/日等信息。
- (2) 作為時間戳和字符串時間之間的橋梁。
- 具體可見如下示例:
time_stuct = time.strptime('2011-05-07 16:37:06', '%Y-%m-%d %X') print(time_stuct.tm_year) print(time_stuct.tm_mon) print(time_stuct.tm_mday) print(time_stuct.tm_hour) print(time_stuct.tm_min) my = 'aaa' '%s'% my my_int = 1 '%d'% my_int "我們在{}工作".format('家里') addr = "家里" f"我們在{addr}工作" #2011 #5 #7 #16 #37 #'我們在家里工作'
3. format time 結(jié)構(gòu)化表示
其具體含義可見下述表格。
屬性 | 含義 |
---|---|
%Y -年 | [0001,…,2018,2019,…,9999] |
%m -月 | [01,02,…,11,12] |
%d -天 | [01,02,…,30,31] |
%M -分鐘 | [00,01,…,58,59] |
%S -秒 | [00,01,…,58,61] |
%X | 本地相應(yīng)時間 |
%y | 去掉世紀(jì)的年份(00 - 99) |
- 常見的結(jié)構(gòu)化時間組合有如下幾種:
- 示例 1:
time.strftime("%Y-%m-%d %X") #'2023-02-21 20:55:40' time.strftime("%Y-%m-%d %X") #'2023-02-21 20:55:40'
示例 2:
time.strftime("%Y-%m-%d") #'2023-02-21'
示例 3:
time.strftime("%m") #'02'
我們可以通過 time 運算獲取我們想要的時間點,并按 %Y-%m-%d %X
的形式表達出來。
import time t1 = time.time() t2=t1+24*60*60 time.strftime("%Y-%m-%d %X",time.localtime(t2)) #'2023-02-22 21:02:38'
或者通過 time 進行暫停操作,例如火箭發(fā)射,我們在循環(huán)結(jié)束后暫停 1s,然后進行下一個語句。
# 倒計時 for i in range(5): print('\r',' %s 秒!' % (5-i), end='') # 暫停1s后運行 time.sleep(1) print('\r',"發(fā)射!!!!") #發(fā)射!!!!
二、datetime 模塊
datatime 模塊重新封裝了time模塊,提供更多接口,提供的類有:date,time,datetime、timedelta,tzinfo 等。
1. date類
其語法模板如下:
datetime.date(year, month, day)
- 有靜態(tài)方法和字段兩種方法。
- date.today():返回一個表示當(dāng)前本地日期的date對象。
- date.fromtimestamp(timestamp):根據(jù)給定的時間戮,返回一個date對象。
- 具體可見如下示例:
- 示例 1:
from datetime import date import time print('date.today():', date.today()) print('date.fromtimestamp():', date.fromtimestamp(time.time())) #date.today(): 2023-02-21 #date.fromtimestamp(): 2023-02-21
示例 2:
from datetime import date print(type(date.fromtimestamp(1650177058))) print(date.fromtimestamp(1650177058)) #<class 'datetime.date'> #2022-04-17
2. 方法和屬性
- 可以通過
d1 = date(2011,06,03)
生成 date 對象 。 - 其具體含義可見下述表格。
屬性 | 含義 |
---|---|
d1.year | 年 |
d1.month | 月 |
d.day | 日 |
d1.replace(year, month, day) | 生成一個新的日期對象,用參數(shù)指定的年,月,日代替原有對象中的屬性。(原有對象仍保持不變) |
d1.timetuple() | 返回日期對應(yīng)的time.struct_time對象 |
d1.weekday() | 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此類推 |
d1.isoweekday() | 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此類推 |
d1.isoformat() | 返回格式如’YYYY-MM-DD’的字符串 |
d1.strftime(fmt) | 和 time 模塊 forma t相同 |
- 具體可見如下示例:
- 示例 1:我們將 day 參數(shù)指定為 1。
now = date.today() now print(now.replace(day=1)) #2023-02-01
示例 2:同示例 1,但是換了一種函數(shù)寫法。
date.today().replace(day=1) #datetime.date(2023, 2, 1)
示例 3:直接使用 now 函數(shù)生成當(dāng)前日期。
now #datetime.date(2023, 2, 21)
示例 4:直接使用 now.isoformat() 函數(shù)生成 YYYY-MM-DD
格式的當(dāng)前日期。
now.isoformat() #'2023-02-21'
示例 5:直接使用 now.isoweekday() 函數(shù)生成周幾,返回對應(yīng)的數(shù)字。
now.isoweekday() #2
示例 6:使用 now.strftime() 函數(shù)自定義輸出格式。
#'2022.04.18' 自定義輸出格式 now.strftime('%Y.%m.%d') #'2023.02.21'
示例 7:
now = date(2021, 10, 26) print(now.year,now.month,now.day) tomorrow = now.replace(day = 1) print('now:', now, ', 當(dāng)月第一天:', tomorrow) print('timetuple():', now.timetuple()) print('weekday():', now.weekday()) print('isoweekday():', now.isoweekday()) print('isoformat():', now.isoformat()) print('strftime():', now.strftime("%Y.%m.%d")) #2021 10 26 #now: 2021-10-26 , 當(dāng)月第一天: 2021-10-01 #timetuple(): time.struct_time(tm_year=2021, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=299, tm_isdst=-1) #weekday(): 1 #isoweekday(): 2 #isoformat(): 2021-10-26 #strftime(): 2021.10.26
3. datetime 類
- datetime 相當(dāng)于 date 和 time 結(jié)合起來。
- 其語法模板如下:
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
- datetime.today():返回一個表示當(dāng)前本地時間的 datetime 對象。
- datetime.now([tz]):返回一個表示當(dāng)前本地時間的 datetime 對象,如果提供了參數(shù) tz,則獲取 tz 參數(shù)所指時區(qū)的本地時間。
- datetime.fromtimestamp(timestamp[, tz]):根據(jù)時間戮創(chuàng)建一個 datetime 對象,參數(shù) tz 指定時區(qū)信息。
- datetime.strptime(date_string, format):將格式字符串轉(zhuǎn)換為 datetime 對象。
- 我們可以將 datetime 轉(zhuǎn)化為指定格式的字符串。
from datetime import datetime now = datetime.now() print(type(now)) print(now.strftime('%Y-%m-%d %X')) print(now.strftime('%Y-%m-%d %H:%M')) #<class 'datetime.datetime'> #2023-02-21 21:45:25 #2023-02-21 21:45
- 對于 2021-11-25 10:23 這類的字符串,我們可以使用 strptime 將其轉(zhuǎn)化為 datetime。
- 需要注意的是,將字符串轉(zhuǎn)化為 datetime 數(shù)據(jù)類型,格式需要統(tǒng)一。
my_str = '2021-11-10 10:23' print(datetime.strptime(my_str,'%Y-%m-%d %H:%M')) my_str = '10/11/2021 10:23' datetime.strptime(my_str,'%d/%m/%Y %H:%M') #2021-11-10 10:23:00 #datetime.datetime(2021, 11, 10, 10, 23)
匯總一下,見下方例子。
from datetime import * import time now = datetime.now() print('today():', datetime.today()) print('now():', datetime.now()) print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time())) print('datetime.strptime(date_string, format):',datetime.strptime('2022-03-21', "%Y-%m-%d")) #today(): 2023-02-21 21:45:28.141748 #now(): 2023-02-21 21:45:28.141748 #fromtimestamp(tmstmp): 2023-02-21 21:45:28.141748 #datetime.strptime(date_string, format): 2022-03-21 00:00:00
三、timedelta 類的時間加減
- 使用 timedelta 可以很方便的在日期上做天 days,小時 hour,分鐘 minute,秒 second,毫秒 millisecond,微秒 microsecond 的時間計算,如果要計算月份則需要另外的辦法。
- 具體可見如下示例。
- 示例 1(加上 -1 和減 1 是相同的):
from datetime import datetime from datetime import timedelta dt = datetime.now() #日期減一天 dt_1 = dt + timedelta(days=-1) #昨天 dt_11 = dt - timedelta(days=1) #昨天 dt3 = dt + timedelta(days=1) #明天 print("dt3:",dt_1) print("dt_11:",dt_11) print("dt3:",dt3) #dt3: 2023-02-20 22:11:28.388926 #dt_11: 2023-02-20 22:11:28.388926 #dt3: 2023-02-22 22:11:28.388926
示例 2(可以使用 s.total_seconds 返回在該時間實例的給定持續(xù)時間內(nèi)覆蓋的總秒數(shù) ):
# 明天的datetime - 昨天的datetime s= dt3 - dt_1 print(s.days) print(s.total_seconds()) #2 #172800.0
示例 3:
delta_obj = dt3-dt print(type(delta_obj),delta_obj)#<type 'datetime.timedelta'> 1 day, 0:00:00 # total_seconds():返回在該時間實例的給定持續(xù)時間內(nèi)覆蓋的總秒數(shù) print(delta_obj.days ,delta_obj.total_seconds())#1 86400.0 #<class 'datetime.timedelta'> 1 day, 0:00:00 #1 86400.0
四、時間處理基礎(chǔ)
- Pandas 提供了四種類型的生成日期時間的對象:日期時間、時間增量、時間跨度、日期偏移量。
- (1) 日期時間(Date Times):具有時區(qū)支持的特定日期和時間。與 Python 標(biāo)準(zhǔn)庫中的 datetime.datetime 類似。如 2020 年 12 月 6 日 13 點 37 分 50 秒.
- (2) 時間增量(Time Deltas):絕對持續(xù)時間,用于在指定時間點基礎(chǔ)上增加指定的增量,如在某年月日的基礎(chǔ)上增加 2 天、增加 2 個月、減少 4 小時等,最后產(chǎn)生一個新的時間點。
- (3) 時間跨度(Time Span):由時間點及其相關(guān)周期定義的時間跨度,如連續(xù)產(chǎn)生一年四個季度的時間序列。
- (4) 日期偏移(Date Offsets):以日歷計算的相對持續(xù)時間,表示時間間隔,兩個時間點之間的長度,如日、周、月、季度、年。
概念 | 標(biāo)量類 | 數(shù)組類 | Pandas 數(shù)據(jù)類型 | 主要建立方法 |
---|---|---|---|---|
日期時間(Date Times) | Timesstamp 時間戳 | DatetimeIndex 時間索引 | datetime64[ns]、datetime64[ns,tz] | to datetime()、date_range() |
時間增量(Time Deltas) | Timedelta 時間增量 | Timedeltalndex 時間增量索引 | timedelta[ns] | to timedelta()、timedelta range() |
時間跨度(Time Span&#x#xff09; | Period 時間周期 | PeriodIndex 周期索引 | period[freq] | Period()、period_range() |
日期偏移(Date Offsets) | DateOffset | None | None | DateOffset() |
- 一般情況下,時間序列主要是
Series
或DataFrame
的時間型索引,可以用時間元素進行操控。
到此這篇關(guān)于Python中的Pandas 時間函數(shù) time 、datetime 模塊和時間處理基礎(chǔ)的文章就介紹到這了,更多相關(guān)Python Pandas 時間函數(shù) time內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于 Python json中l(wèi)oad和loads區(qū)別
這篇文章主要介紹了關(guān)于 Python json中l(wèi)oad和loads區(qū)別,文章也有簡單的說明它們之間的相同點,然后詳細(xì)介紹不同點,需要的朋友可以參考一下文章的具體內(nèi)容2021-11-11Python flask框架實現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù)
這篇文章主要介紹了Python flask框架實現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06人工智能學(xué)習(xí)Pytorch教程Tensor基本操作示例詳解
這篇文章主要為大家介紹了人工智能學(xué)習(xí)Pytorch教程Tensor的基本操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11全面掌握Python?JSON庫函數(shù)與方法學(xué)會JSON數(shù)據(jù)處理
Python提供了內(nèi)置的JSON庫,允許在Python中解析和序列化JSON數(shù)據(jù),本文將深入研究Python中JSON庫的各種函數(shù)和方法,為你提供豐富的示例代碼來幫助掌握J(rèn)SON處理的方方面面2024-01-01通過Python實現(xiàn)Payload分離免殺過程詳解
這篇文章主要介紹了通過Python實現(xiàn)Payload分離免殺過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07Python使用 Beanstalkd 做異步任務(wù)處理的方法
這篇文章主要介紹了Python使用 Beanstalkd 做異步任務(wù)處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Python os模塊中的isfile()和isdir()函數(shù)均返回false問題解決方法
這篇文章主要介紹了Python os模塊中的isfile()和isdir()函數(shù)均返回false問題解決方法,返回false的原因是路徑使用了相對路徑,使用絕對路徑就可以解決這個問題,需要的朋友可以參考下2015-02-02