python输入年月日输出年月日_python时序分析
終于迎來(lái)了周末,能讓我有時(shí)間把這周立的flag全部解決掉。
在上一篇pandas練習(xí)中,我有提到要把python的時(shí)間處理單獨(dú)寫(xiě)一篇,如果有讀者仔細(xì)觀察的話,可以看到我用的圖片就是時(shí)間模塊datetime里面的一些操作。那么我們今天的要學(xué)習(xí)的內(nèi)容就是datetime內(nèi)建模塊和pandas庫(kù)中處理時(shí)間的幾個(gè)函數(shù),以及resample, re-sample是重新采集的意思,也可以理解為把時(shí)間按照一定的約定重置。
剛好最近做的pandas練習(xí)系列里面剛好有一個(gè)章節(jié)是時(shí)間序列的練習(xí)的。
所以學(xué)完基礎(chǔ)的知識(shí)以后加上一個(gè)練習(xí),我相信可以對(duì)這個(gè)部分能有不同的理解。
好的,讓我開(kāi)始快樂(lè)的時(shí)間之旅吧。
首先申明我學(xué)習(xí)這種庫(kù)喜歡直接去啃官方的文檔,來(lái)源在這
datetime - Basic date and time types - Python 3.7.4rc1 documentation?docs.python.org以及
pandas.to_datetime - pandas 0.24.2 documentation?pandas.pydata.org還有
Resampling - pandas 0.24.2 documentation?pandas.pydata.org有興趣的伙伴也可以自己去這幾個(gè)網(wǎng)址學(xué)習(xí)。
在今天回顧之前寫(xiě)的文章的過(guò)程中,我發(fā)現(xiàn)自己有一個(gè)很大的缺點(diǎn),那就是缺乏邏輯性,之前的文多有一種隨性所為的意思,所以我想從這篇文章開(kāi)始,引入思維導(dǎo)圖,這一方面方便各位讀者,另一方面當(dāng)我自己回頭看自己的寫(xiě)過(guò)的文的時(shí)候,也能更加的方便的常讀常新。
一、python有很多庫(kù)可以用來(lái)處理時(shí)間,如:datetime,time,calendar等
python常用的處理時(shí)間的庫(kù)而datetime常用的是datetime.datetime函數(shù)。我們今天就從datetime來(lái)入手了
學(xué)習(xí)任何一個(gè)模塊的時(shí)候都應(yīng)該先看這個(gè)庫(kù)都有哪些模塊
同樣的使用導(dǎo)圖
datetime庫(kù)的基本信息開(kāi)始這個(gè)庫(kù)之前,我們要首先看兩個(gè)參數(shù)
datetime.MINYEAR=1
datetime.MAXYEAR=9999
這兩個(gè)類表示的是datetime從1到9999,這對(duì)于我們的處理來(lái)說(shuō)足夠了,畢竟看到這篇文章的沒(méi)有人可以到9999年。LOL
通過(guò)上面的圖形,能夠清楚的看到,datetime庫(kù)最常用的是timedelta和datetime這兩個(gè)類。
我們首先看一下timedelta
from datetime import datetime now = datetime.now() now輸出結(jié)果求解一個(gè)時(shí)間差
delta = datetime(2000,1,7) - datetime(1998,6,23,7,16) delta輸出結(jié)果delta.days輸出結(jié)果delta.seconds輸出結(jié)果這兩個(gè)語(yǔ)句就是表示的兩個(gè)時(shí)間的差值,其中delta.days表示的是兩個(gè)時(shí)間之間相差的天數(shù),delta.seconds表示的是相差的秒鐘數(shù)。也就是我輸入的這兩個(gè)時(shí)間相差562天,60240微秒
我們?cè)賮?lái)看一下timedelta的一些基本操作
from datetime import timedelta year = timedelta(days=365) another_year = timedelta(weeks=40,days=84,hours=23,minutes=50,seconds=600) year.total_seconds()輸出結(jié)果year == another_year輸出結(jié)果時(shí)間的相加
start 輸出結(jié)果時(shí)間相減
start 輸出結(jié)果好的,下面主要來(lái)看一下datetime.datetime,我們之所以學(xué)習(xí)datetime庫(kù)是因?yàn)樵趯?shí)際的工作中,時(shí)間格式不是統(tǒng)一的,不同的人會(huì)有不同的寫(xiě)法。使用datetime可以按照我們想要的時(shí)間格式來(lái)實(shí)現(xiàn)
datetime.today()輸出結(jié)果獲取當(dāng)前的時(shí)間
datetime.now()輸出結(jié)果獲取倫敦的當(dāng)前時(shí)間,因?yàn)?#xff0c;我們知道我們是東8區(qū),所以應(yīng)該相差8個(gè)小時(shí)
datetime.utcnow()輸出結(jié)果可以看到確實(shí)是相差了8個(gè)小時(shí)。
下面看一個(gè)比較常用的字符串型時(shí)間轉(zhuǎn)換為常見(jiàn)的日期格式的操作。
有兩種操作
1 strftime(format) 2datetime.strptime(string,format)現(xiàn)在分別介紹一些這兩個(gè)用法
stamp我們?cè)趤?lái)看一下第二中操作時(shí)間的做法
dt = datetime.strptime('21/11/06 16:30','%d/%m/%y %H:%M') dt輸出結(jié)果能夠看到這兩個(gè)的做法的區(qū)別是什么,1第一種做法是直接操作一個(gè)字符串的,而第二種的做法是把字符串傳遞給模塊,然后根據(jù)格式操作。
但是以上的兩種做法都有一個(gè)問(wèn)題,就是每次使用時(shí)都要編寫(xiě)一個(gè)格式,這個(gè)就很方便了,所以這里介紹一個(gè)第三方包dateutil 這個(gè)庫(kù)中有一個(gè)類parser 這個(gè)類種有一種做法是parser.parse
我們來(lái)看一下
from dateutil.parser import parse parse('2001-01-03')輸出結(jié)果再看一個(gè)例子,
parse('20140608')輸出結(jié)果可以看到這個(gè)處理時(shí)間非常方便,可以直接把類似于時(shí)間的格式,直接處理成數(shù)據(jù)的形式,簡(jiǎn)單方便。
基本所有的日期表示dateutil都能夠解析,比如下面這個(gè)
parse('Jan 31,1997 10:45 PM')輸出結(jié)果在國(guó)際上經(jīng)常能夠看到日期出現(xiàn)在月份之前,可以傳遞dayfirst = True來(lái)表明這種情況
如下所示
parse('6/12/2011',dayfirst=True)輸出結(jié)果以上是介紹了datetime以及一個(gè)非常好用的庫(kù)dateutil,但是要注意的是,dateutil是一個(gè)好用但是不完美的工具,比如可能將一些字符串識(shí)別為不想要的日期
parse輸出結(jié)果可以看到,把42這種無(wú)法直接識(shí)別的字符串識(shí)別成了2042年的當(dāng)天(上面是一個(gè)很好的例子)當(dāng)然了,其實(shí)也可以理解,對(duì)于時(shí)間來(lái)說(shuō),最好的當(dāng)然還是有年月日了,所以這個(gè)庫(kù)還是很還用的。
各位關(guān)注我的朋友應(yīng)該知道,我最近一直在寫(xiě)一個(gè)系列,那就是pandas練習(xí),了解一點(diǎn)pandas的應(yīng)該都知道,pandas真的超級(jí)好用,不僅可以處理不同格式的數(shù)據(jù),還可以畫(huà)圖,有一位朋友給我留言說(shuō)為什么不用pandas直接繪圖,其實(shí)我知道pandas能夠繪制圖,但是這通常需要和matplotlib一起用。所以我就沒(méi)用panda繪圖。
好吧扯得有點(diǎn)遠(yuǎn),下面我們來(lái)看一下pandas處理時(shí)間時(shí)的一些應(yīng)用,這個(gè)主要包含todatetime,resample,還有用來(lái)處理時(shí)間索引的data_range
下面我將重點(diǎn)說(shuō)明這三個(gè)部分。
首先我們來(lái)看一下pandas.to_datetime,這個(gè)模塊可以很好的轉(zhuǎn)換很多不同的日期表示格式。
老規(guī)矩,還是先看一下這個(gè)模塊的參數(shù)
pandas我專門(mén)做了一個(gè)表格來(lái)說(shuō)明這些參數(shù)分別代表著什么以及怎么使用
這是我自己按照官方文檔翻譯的,可能會(huì)有一些錯(cuò)誤,還請(qǐng)各位看官謹(jǐn)慎參考下面我們看一些例子,來(lái)加深理解
df = pd.DataFrame({'year':[2015,2016],'month':[4,3],'day':[4,5]}) pd.to_datetime(df)輸出結(jié)果這個(gè)例子中轉(zhuǎn)換的數(shù)據(jù)是DataFrame
dt = '2016-07-08' pd.to_datetime(dt)輸出結(jié)果這個(gè)例子使用的是字符串型
下面我們做一個(gè)整型數(shù)據(jù)的轉(zhuǎn)換
dt1 = 20190807 pd.to_datetime(dt1,unit='s')輸出結(jié)果我們?cè)诳匆幌耬rrors的用法
#把dt1轉(zhuǎn)換成想要的時(shí)間格式 pd.to_datetime(dt1,format='%Y%m%d',errors='ignore')輸出結(jié)果再來(lái)一個(gè)
pd.to_datetime('13000101',format='%Y%m%d',errors='coerce')輸出結(jié)果NaT=Not a Time是時(shí)間里面的空值
我們?cè)賮?lái)看一下infer_datetime_format等于True時(shí)的執(zhí)行順序,
#首先創(chuàng)建一個(gè)數(shù)據(jù) s = pd.Series(['3/11/2000','3/12/2000','3/13/2000']*1000) s.head()輸出結(jié)果在看一下執(zhí)行用時(shí),這里要使用魔法函數(shù),以及即時(shí)函數(shù)timeit
%timeit pd.to_datetime(s,infer_datetime_format=True)輸出結(jié)果%timeit pd.to_datetime(s,infer_datetime_format=False)輸出結(jié)果能夠看到著兩個(gè)語(yǔ)句執(zhí)行速度的區(qū)別,infer_datetime_format=True的執(zhí)行速度是infer_datetime_format=False的20多倍
好的到這里to_datetime這個(gè)模塊基本到位了,這個(gè)可以和to-numeric模塊聯(lián)系起來(lái),很方便,很強(qiáng)大,能夠處理的數(shù)據(jù)類型很多
由于最后一部分resample的內(nèi)容特別多,所以我想了想還是分兩部分來(lái)寫(xiě)吧。
好的今天就到這里了,我們下期節(jié)目再見(jiàn)!
哈哈哈,期待朋友們的點(diǎn)贊!謝謝!!!
總結(jié)
以上是生活随笔為你收集整理的python输入年月日输出年月日_python时序分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java实现获取当前日期、农历、周
- 下一篇: Python网络爬取科目一题库(1685