深入了解Python中的時(shí)間處理函數(shù)
一、datetime模塊介紹
python中處理時(shí)間有個(gè)datetime模塊,模塊定義了如下幾個(gè)類:
- datetime.date:表示日期的類,常用屬性有year、month、day。
- datetime.time:表示時(shí)間的類,常用屬性有hour、minute、second、microsecond。
- datetime.datetime:表示日期時(shí)間類。
- datetime.timedelta:表示時(shí)間間隔類,即兩個(gè)時(shí)點(diǎn)之間的長(zhǎng)度。
- datetime.tzinfo:表示時(shí)區(qū)的類。
為了大家熟悉上面常用的類,下面介紹一些實(shí)例。
1 datetime.date類
#datetime.date類 import datetime print('1.現(xiàn)在是',datetime.date.today(),'日') print('2.現(xiàn)在是',datetime.date.today().year,'年') print('3.現(xiàn)在是',datetime.date.today().month,'月') print('4.現(xiàn)在是',datetime.date.today().day,'日') #得到結(jié)果: 1.現(xiàn)在是 2021-10-31 日 2.現(xiàn)在是 2021 年 3.現(xiàn)在是 10 月 4.現(xiàn)在是 31 日
2 datetime.datetime類
#datetime.datetime類 import datetime print('1.現(xiàn)在是',datetime.datetime.today(),'日') print('2.現(xiàn)在是',datetime.datetime.today().year,'年') print('3.現(xiàn)在是',datetime.datetime.today().month,'月') print('4.現(xiàn)在是',datetime.datetime.today().day,'日') print('5.現(xiàn)在是',datetime.datetime.today().hour,'時(shí)') print('6.現(xiàn)在是',datetime.datetime.today().minute,'分') print('7.現(xiàn)在是',datetime.datetime.today().second,'秒') print('8.現(xiàn)在是',datetime.datetime.today().microsecond,'微秒') #得到結(jié)果: 1.現(xiàn)在是 2021-10-31 15:55:23.676360 日 2.現(xiàn)在是 2021 年 3.現(xiàn)在是 10 月 4.現(xiàn)在是 31 日 5.現(xiàn)在是 15 時(shí) 6.現(xiàn)在是 55 分 7.現(xiàn)在是 23 秒 8.現(xiàn)在是 677333 微秒
3 datetime.timedelta類
#datetime.timedelta類 import datetime today = datetime.date.today() yestoday = today + datetime.timedelta(days = -1) tomorrow = today + datetime.timedelta(days = 1) print('1.今天是', today,'日') print('2.昨天是', yestoday,'日') print('3.明天是', tomorrow,'日') #得到結(jié)果: 1.今天是 2021-10-31 日 2.昨天是 2021-10-30 日 3.明天是 2021-11-01 日
二、日期轉(zhuǎn)字符
這一小節(jié)介紹把日期轉(zhuǎn)換成字符,主要用到datetime.datetime.strftime
函數(shù)。
#dateTime to str date_time_now = datetime.datetime.now() str_now1 = datetime.datetime.strftime(date_time_now, '%Y-%m-%d') print(date_time_now) str_now1 #得到結(jié)果: 2021-10-31 16:20:45.391792 '2021-10-31'
三、字符轉(zhuǎn)日期
??這一小節(jié)介紹把字符轉(zhuǎn)換成日期,主要用到datetime.datetime.strptime
函數(shù)。
#str to date str_time = '2021-10-21' date_time = datetime.datetime.strptime(str_time, '%Y-%m-%d').date() print(date_time) #得到結(jié)果: 2021-10-21
四、數(shù)值轉(zhuǎn)日期
這一小節(jié)介紹把數(shù)值轉(zhuǎn)換成日期。從excel數(shù)據(jù)表中讀取時(shí)間,如果是2021/10/11這種格式,會(huì)轉(zhuǎn)變成相應(yīng)數(shù)值44480。這時(shí)需要轉(zhuǎn)換成對(duì)應(yīng)的日期,具體代碼如下:
#num to date from datetime import datetime from xlrd import xldate_as_datetime, xldate_as_tuple num = 44480 datetime(*xldate_as_tuple(num,0)).strftime('%Y-%m-%d') #得到結(jié)果: '2021-10-11'
五、時(shí)間函數(shù)在催收數(shù)據(jù)處理中的應(yīng)用
本小節(jié)是應(yīng)用前面小節(jié)闡述的函數(shù),處理實(shí)際工作中遇到的問(wèn)題。比如有一批信貸催收數(shù)據(jù),由于一個(gè)客戶可能電話沒(méi)有接通,導(dǎo)致存在多次撥打的可能。我們想分析客戶沒(méi)有還錢(qián)的真實(shí)原因,所以想取客戶最后一次通話,催收員記錄的客戶逾期原因。這時(shí)就需要把數(shù)據(jù)集按合同號(hào)和撥打電話的時(shí)間排序,取最后一次撥打電話的逾期原因。
1 讀取數(shù)據(jù)
首先是讀取數(shù)據(jù),代碼如下:
import pandas as pd from xlrd import open_workbook file_name = r'F:\公眾號(hào)\43.時(shí)間函數(shù)\催記-2021-10-11至2021-10-17.xlsx' #文件名稱 table = open_workbook(file_name) #打開(kāi)文件 sheets_name = table.sheet_names() #獲取excel中的sheet名 get_sheet1 = table.sheet_by_name('Sheet1') #獲取Sheet1 data = list() for i in range(get_each_sheet.nrows): col_values = get_sheet1.row_values(i, start_colx=0, end_colx=None) data.append(col_values) data1 = pd.DataFrame(data) #把Sheet1中的數(shù)據(jù)讀取出來(lái)生成數(shù)據(jù)框 data1.columns = data1.iloc[0] data1 = data1.drop(index=0) #數(shù)據(jù)框列名確定,并刪除第一行 data2 = data1[['合同號(hào)', '姓名', '聯(lián)絡(luò)類型', '聯(lián)絡(luò)類型', '催收時(shí)間', '催收內(nèi)容', '催收狀態(tài)', '委案日期']] #取數(shù)據(jù)框中的固定列
注:如需本文數(shù)據(jù),可直接在公眾號(hào)中回復(fù)”催收數(shù)據(jù)時(shí)間處理”,即可免費(fèi)獲取。
得到結(jié)果:
2 把催收時(shí)間處理成日期格式
接著是處理催收時(shí)間變成日期格式,代碼如下:
from datetime import datetime from xlrd import xldate_as_datetime, xldate_as_tuple def num_to_date(num_): return datetime(*xldate_as_tuple(num_,0)).strftime('%Y-%m-%d') data2['催收時(shí)間'] = data2['催收時(shí)間'].apply(num_to_date) data2.head(2)
得到結(jié)果:
3 取客戶最后一條催收記錄
最后是對(duì)數(shù)據(jù)框按合同號(hào)和催收時(shí)間進(jìn)行排序,取最后一條催收記錄,代碼如下:
data3 = data2.sort_values(by=['合同號(hào)', '催收時(shí)間'],ascending=[False, False]) data3 = data3.groupby('合同號(hào)',as_index=False).first() print(data2.shape) print(data3.shape)
得到結(jié)果:
(1744, 8)
(1455, 8)?
到此這篇關(guān)于深入了解Python中的時(shí)間處理函數(shù)的文章就介紹到這了,更多相關(guān)Python時(shí)間處理函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python通過(guò)apply使用元祖和列表調(diào)用函數(shù)實(shí)例
這篇文章主要介紹了python通過(guò)apply使用元祖和列表調(diào)用函數(shù),實(shí)例分析了python中apply方法的使用技巧,需要的朋友可以參考下2015-05-05解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法
這篇文章主要介紹了解決pip安裝tensorflow中出現(xiàn)的no module named tensorflow.python 問(wèn)題方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解
線性判別分析(Linear?Discriminant?Analysis,?LDA)是一種監(jiān)督學(xué)習(xí)的降維方法,也就是說(shuō)數(shù)據(jù)集的每個(gè)樣本是有類別輸出。和之前介紹的機(jī)器學(xué)習(xí)降維之主成分分析(PCA)方法不同,PCA是不考慮樣本類別輸出的無(wú)監(jiān)督學(xué)習(xí)方法2022-01-0113個(gè)你可能未使用過(guò)的Python特性分享
Python?是頂級(jí)編程語(yǔ)言之一,它具有許多程序員從未使用過(guò)的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過(guò)的13?個(gè)?Python?特性,感興趣的可以學(xué)習(xí)一下2022-11-11python連接clickhouse的端口問(wèn)題及解決
這篇文章主要介紹了python連接clickhouse的端口問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python進(jìn)程Multiprocessing模塊原理解析
這篇文章主要介紹了Python進(jìn)程Multiprocessing模塊原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02一行Python3代碼實(shí)現(xiàn)解析地址信息
在日常數(shù)據(jù)處理的過(guò)程中,有時(shí)候拿到手的是完整的地址信息,如果需要從地址信息中解析出相應(yīng)的各級(jí)行政單元名稱,方式有很多,而今天要介紹的方式只需要一行代碼即可快速實(shí)現(xiàn),快跟隨小編一起學(xué)習(xí)一下吧2022-05-05python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字
這篇文章主要介紹了python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12