深入瞭解Python中的時間處理函數
一、datetime模塊介紹
python中處理時間有個datetime模塊,模塊定義瞭如下幾個類:
- datetime.date:表示日期的類,常用屬性有year、month、day。
- datetime.time:表示時間的類,常用屬性有hour、minute、second、microsecond。
- datetime.datetime:表示日期時間類。
- datetime.timedelta:表示時間間隔類,即兩個時點之間的長度。
- datetime.tzinfo:表示時區的類。
為瞭大傢熟悉上面常用的類,下面介紹一些實例。
1 datetime.date類
#datetime.date類 import datetime print('1.現在是',datetime.date.today(),'日') print('2.現在是',datetime.date.today().year,'年') print('3.現在是',datetime.date.today().month,'月') print('4.現在是',datetime.date.today().day,'日') #得到結果: 1.現在是 2021-10-31 日 2.現在是 2021 年 3.現在是 10 月 4.現在是 31 日
2 datetime.datetime類
#datetime.datetime類 import datetime print('1.現在是',datetime.datetime.today(),'日') print('2.現在是',datetime.datetime.today().year,'年') print('3.現在是',datetime.datetime.today().month,'月') print('4.現在是',datetime.datetime.today().day,'日') print('5.現在是',datetime.datetime.today().hour,'時') print('6.現在是',datetime.datetime.today().minute,'分') print('7.現在是',datetime.datetime.today().second,'秒') print('8.現在是',datetime.datetime.today().microsecond,'微秒') #得到結果: 1.現在是 2021-10-31 15:55:23.676360 日 2.現在是 2021 年 3.現在是 10 月 4.現在是 31 日 5.現在是 15 時 6.現在是 55 分 7.現在是 23 秒 8.現在是 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,'日') #得到結果: 1.今天是 2021-10-31 日 2.昨天是 2021-10-30 日 3.明天是 2021-11-01 日
二、日期轉字符
這一小節介紹把日期轉換成字符,主要用到datetime.datetime.strftime
函數。
#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 #得到結果: 2021-10-31 16:20:45.391792 '2021-10-31'
三、字符轉日期
這一小節介紹把字符轉換成日期,主要用到datetime.datetime.strptime
函數。
#str to date str_time = '2021-10-21' date_time = datetime.datetime.strptime(str_time, '%Y-%m-%d').date() print(date_time) #得到結果: 2021-10-21
四、數值轉日期
這一小節介紹把數值轉換成日期。從excel數據表中讀取時間,如果是2021/10/11這種格式,會轉變成相應數值44480。這時需要轉換成對應的日期,具體代碼如下:
#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') #得到結果: '2021-10-11'
五、時間函數在催收數據處理中的應用
本小節是應用前面小節闡述的函數,處理實際工作中遇到的問題。比如有一批信貸催收數據,由於一個客戶可能電話沒有接通,導致存在多次撥打的可能。我們想分析客戶沒有還錢的真實原因,所以想取客戶最後一次通話,催收員記錄的客戶逾期原因。這時就需要把數據集按合同號和撥打電話的時間排序,取最後一次撥打電話的逾期原因。
1 讀取數據
首先是讀取數據,代碼如下:
import pandas as pd from xlrd import open_workbook file_name = r'F:\公眾號\43.時間函數\催記-2021-10-11至2021-10-17.xlsx' #文件名稱 table = open_workbook(file_name) #打開文件 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中的數據讀取出來生成數據框 data1.columns = data1.iloc[0] data1 = data1.drop(index=0) #數據框列名確定,並刪除第一行 data2 = data1[['合同號', '姓名', '聯絡類型', '聯絡類型', '催收時間', '催收內容', '催收狀態', '委案日期']] #取數據框中的固定列
註:如需本文數據,可直接在公眾號中回復”催收數據時間處理”,即可免費獲取。
得到結果:
2 把催收時間處理成日期格式
接著是處理催收時間變成日期格式,代碼如下:
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['催收時間'] = data2['催收時間'].apply(num_to_date) data2.head(2)
得到結果:
3 取客戶最後一條催收記錄
最後是對數據框按合同號和催收時間進行排序,取最後一條催收記錄,代碼如下:
data3 = data2.sort_values(by=['合同號', '催收時間'],ascending=[False, False]) data3 = data3.groupby('合同號',as_index=False).first() print(data2.shape) print(data3.shape)
得到結果:
(1744, 8)
(1455, 8)
到此這篇關於深入瞭解Python中的時間處理函數的文章就介紹到這瞭,更多相關Python時間處理函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python獲取當前時間日期的實現示例
- Python 時間操作datetime詳情(下)
- Python中的xlrd模塊使用整理
- Python 時間操作datetime詳情
- Python標準庫之日期、時間和日歷模塊