datetime.timedelta對(duì)象代表兩個(gè)時(shí)間之間的時(shí)間差,兩個(gè)date或datetime對(duì)象相減就可以返回一個(gè)timedelta對(duì)象。
創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元諸城做網(wǎng)站,已為上家服務(wù),為諸城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
利用以下數(shù)據(jù)進(jìn)行說(shuō)明:
如果我們發(fā)現(xiàn)時(shí)間相關(guān)內(nèi)容的變量為int,float,str等類型,不方便后面的分析,就需要使用該函數(shù)轉(zhuǎn)化為常用的時(shí)間變量格式:pandas.to_datetime
轉(zhuǎn)換得到的時(shí)間單位如下:
如果時(shí)間序列格式不統(tǒng)一,pd.to_datetime()的處理方式:
當(dāng)然,正確的轉(zhuǎn)換是這樣的:
第一步:to_datetime()
第二步:astype(datetime64[D]),astype(datetime64[M])
本例中:
order_dt_diff必須是Timedelta('0 days 00:00:00')格式,可能是序列使用了diff()
或者pct_change()。
前者往往要通過(guò)'/np.timedelta'去掉單位days。后者其實(shí)沒有單位。
假如我們要統(tǒng)計(jì)某共享單車一天內(nèi)不同時(shí)間點(diǎn)的用戶使用數(shù)據(jù),例如
還有其他維度的提取,年、月、日、周,參見:
Datetime properties
注意 :.dt的對(duì)象必須為pandas.Series,而不可以是Series中的單個(gè)元素
時(shí)間格式轉(zhuǎn)換分為兩種,時(shí)間轉(zhuǎn)換為字符串和字符串轉(zhuǎn)換為時(shí)間,具體代碼例子如下:
1?import?datetime
2?import?time
3?#?日期轉(zhuǎn)換為字符串,使用strftime()函數(shù)
4?#?time.strftime(format[,?t])
5
6?print?datetime.datetime.now()
7?print?datetime.datetime.now().strftime("%Y-%m-%d
%H:%M:%S")
8?print?datetime.datetime.now().strftime("%b
%d?%Y?%H:%M:%S")
9?print?datetime.datetime.now().strftime("%c
%d?%Y?%H:%M:%S")
10?#?字符串轉(zhuǎn)換為日期,使用strptime()函數(shù)
11?t?=?(2009,?2,?17,?8,?3,?38,?1,?48,?0)
12?t?=?time.mktime(t)
13?print?time.strftime("%b?%d?%Y?%H:%M:%S",time.gmtime(t))
14?print?time.strftime("%Y-%m-%d?%H:%M:%S",time.gmtime(t))
注:格式字符說(shuō)明:
python中時(shí)間日期格式化符號(hào):
%y
兩位數(shù)的年份表示(00-99)
%Y
四位數(shù)的年份表示(000-9999)
%m
月份(01-12)
%d
月內(nèi)中的一天(0-31)
%H
24小時(shí)制小時(shí)數(shù)(0-23)
%I
12小時(shí)制小時(shí)數(shù)(01-12)
%M
分鐘數(shù)(00=59)
%S
秒(00-59)
%a
本地簡(jiǎn)化星期名稱
%A
本地完整星期名稱
%b
本地簡(jiǎn)化的月份名稱
%B
本地完整的月份名稱
%c
本地相應(yīng)的日期表示和時(shí)間表示
%j
年內(nèi)的一天(001-366)
%p
本地A.M.或P.M.的等價(jià)符
%U
一年中的星期數(shù)(00-53)星期天為星期的開始
%w
星期(0-6),星期天為星期的開始
%W
一年中的星期數(shù)(00-53)星期一為星期的開始
%x
本地相應(yīng)的日期表示
%X
本地相應(yīng)的時(shí)間表示
%Z
當(dāng)前時(shí)區(qū)的名稱
%%
%號(hào)本身
5位數(shù)日期戳讀取 .mat 文件處理里面數(shù)據(jù)時(shí),發(fā)現(xiàn)里面的日期數(shù)據(jù)全部都是 “5位數(shù)” 數(shù)字,很不解;后來(lái)查到可以在excel中通過(guò)設(shè)置單元格調(diào)回標(biāo)準(zhǔn)日期格式,如下:選中日期戳,右鍵選擇 “格式化單元格(Format Cells)”選擇需要的日期格式,點(diǎn)擊ok即可通過(guò)代碼轉(zhuǎn)成標(biāo)準(zhǔn)日期例如這個(gè)DataFrame中的日期,全部都是“日期戳”格式的,但我需要的是人能看懂的“標(biāo)準(zhǔn)日期”;確認(rèn)起始日期首先需拿一個(gè)“日期戳”對(duì)應(yīng)的時(shí)間(標(biāo)準(zhǔn)日期),減去這個(gè)日期戳,得出起始時(shí)間。獲取起始時(shí)間:2018-05-02 對(duì)應(yīng)的日期戳為:43222,接下來(lái)通過(guò)pandas 的Timedelta()和 to_datetime() 獲取起始時(shí)間??梢钥吹狡鹗既掌跒椤?899-12-30”這樣一來(lái)后續(xù)日期戳轉(zhuǎn)標(biāo)準(zhǔn)日期,只需要在 “1899-12-30” 的基礎(chǔ)上加 “日期戳”即可。批量轉(zhuǎn)換首先定義一個(gè)函數(shù)用來(lái)進(jìn)行轉(zhuǎn)換:#定義轉(zhuǎn)化日期戳的函數(shù),stamp為日期戳def date(stamp):delta = pd.Timedelta(str(stamp)+'D')real_time = pd.to_datetime('1899-12-30') + deltareturn real_time然后針對(duì)DataFrame需要轉(zhuǎn)換的列進(jìn)行轉(zhuǎn)換即可:
這需求折騰了我半天..
import time
import datetime as datetime
def late_time(time2):
# 先獲得時(shí)間數(shù)組格式的日期
#time2是外部傳入的任意日期
now_time = datetime.datetime.strptime(time2, '%Y-%m-%d')
#如需求是當(dāng)前時(shí)間則去掉函數(shù)參數(shù)改寫 ? ? ?為datetime.datetime.now()
threeDayAgo = (now_time - datetime.timedelta(days =30))
# 轉(zhuǎn)換為時(shí)間戳
timeStamp =int(time.mktime(threeDayAgo.timetuple()))
# 轉(zhuǎn)換為其他字符串格式
otherStyleTime = threeDayAgo.strftime("%Y-%m-%d")
return otherStyleTime
a = late_time("2019-3-30")
print(a)# 打印2018-02-28
python中要把字符串轉(zhuǎn)換成日期格式需要使用time模塊中的strptime函數(shù),例子如下:
import time
t = time.strptime('2016-05-09 21:09:30', '%y-%m-%d %h:%m:%s')
print(t)執(zhí)行結(jié)果如下:
time.struct_time(tm_year=2016,
tm_mon=5,
tm_mday=9,
tm_hour=21,
tm_min=9,
tm_sec=30,
tm_wday=0,
tm_yday=130,
tm_isdst=-1)
函數(shù)說(shuō)明:
第一個(gè)參數(shù)是要轉(zhuǎn)換成日期格式的字符串,第二個(gè)參數(shù)是字符串的格式
函數(shù)官方文檔如下:
help on built-in function strptime in module time:
strptime(...)
strptime(string, format) - struct_time
parse a string to a time tuple according to a format specification.
see the library reference manual for formatting codes (same as
strftime()).
commonly used format codes:
%y year with century as a decimal number.
%m month as a decimal number [01,12].
%d day of the month as a decimal number [01,31].
%h hour (24-hour clock) as a decimal number [00,23].
%m minute as a decimal number [00,59].
%s second as a decimal number [00,61].
%z time zone offset from utc.
%a locale's abbreviated weekday name.
%a locale's full weekday name.
%b locale's abbreviated month name.
%b locale's full month name.
%c locale's appropriate date and time representation.
%i hour (12-hour clock) as a decimal number [01,12].
%p locale's equivalent of either am or pm.
other codes may be available on your platform. see documentation for the c library strftime function.
最近寫的項(xiàng)目用到了knn模型進(jìn)行預(yù)測(cè)性分析,但是需要把日期型的字段轉(zhuǎn)為整型,換言之,就是時(shí)間戳。
將時(shí)間轉(zhuǎn)換成時(shí)間戳
例如:
將時(shí)間2019-4-13 10:02:23轉(zhuǎn)換成時(shí)間戳,具體的操作過(guò)程為:
利用strptime()函數(shù)將時(shí)間轉(zhuǎn)換成時(shí)間數(shù)組
利用mktime()函數(shù)將時(shí)間數(shù)組轉(zhuǎn)換成時(shí)間戳
import time
dt = "2019-4-13 10:02:23"
# 轉(zhuǎn)為時(shí)間數(shù)組
timeArray = time.strptime(dt,"%Y-%m-%d %H:%M:%S")
# 轉(zhuǎn)為時(shí)間戳
timeStamp = int(time.mktime(timeArray))
print(timeStamp)