在前面的文章中,我們總結(jié)了一下關(guān)于時(shí)間日期的簡(jiǎn)單計(jì)算,但是我們發(fā)現(xiàn)很多功能都是datetime庫(kù)提供的,那么pandas有沒(méi)有提供跟日期時(shí)間有關(guān)的函數(shù)呢?
自然是有的就是.dt,跟.str一樣,后面可以加多個(gè)函數(shù)進(jìn)行操作。
比如現(xiàn)在有一組數(shù)據(jù):

由于日期列都是datetime64格式的,當(dāng)導(dǎo)出到excel或者別的地方的時(shí)候就會(huì)出現(xiàn)格式不是我們想要的:

這種在導(dǎo)出后還要再次進(jìn)行格式的調(diào)整,將會(huì)變得很麻煩。
所以我們要看一下有沒(méi)有其它的方式導(dǎo)出之后就直接是標(biāo)準(zhǔn)的日期格式的。
一、日期格式設(shè)置:dt.strftme()

需要注意的是在經(jīng)過(guò).dt.strftime()處理后的數(shù)據(jù)就不再是datetime類(lèi)型了,就算導(dǎo)出到excel也是不能直接被識(shí)別為日期的,所以處理的時(shí)候要慎重。
當(dāng)然,還可以處理成其它的格式:





還有設(shè)置格式更簡(jiǎn)潔的方式:

只要記住大寫(xiě)Y和小寫(xiě)y區(qū)別,其它的就都比較簡(jiǎn)單了。dt.strftime()與Datetime庫(kù)里的格式設(shè)置不一樣,這一點(diǎn)要注意區(qū)別。
二、 提取時(shí)間日期中的 部分信息:
dt.year能直接提取出年份,而且是整數(shù)型:

其它信息和年份差不多:





還可以返回星期幾:(星期一是0,星期天是6,跟切片的時(shí)候很相似。)

返回周數(shù)是df.week()。
這就聯(lián)想到前面的文章提到的timedelta類(lèi)型提取日期,那這個(gè)dt能不能用在timedelta類(lèi)型的數(shù)據(jù)上呢?


由上圖可知以這樣的一直方式比匿名函數(shù)更加的方便,這里的.days很類(lèi)似datetime庫(kù)里面的.days。相當(dāng)于用.dt.days代替了之前的map(lambda x:x.days)。
按照這個(gè)邏輯,.dt.total_seconds()也是可以使用的:

三、計(jì)算天數(shù)相關(guān)的函數(shù)
計(jì)算是一年當(dāng)中的第幾天:

同理計(jì)算一年當(dāng)中的第幾周(.dt.weekofyear):

除了上面這些,還有.dt后面還可以接很多函數(shù),實(shí)在太多,就不一一介紹了。
需要注意的是用split出來(lái)后的是obj格式,應(yīng)該先使用datetime.strptime轉(zhuǎn)為時(shí)間格式之后才能進(jìn)行dt.strftime處理。