摘要
時(shí)間序列(time series)數(shù)據(jù)是一種重要的結(jié)構(gòu)化數(shù)據(jù)形式,應(yīng)用于多個(gè)領(lǐng)域,包括金融學(xué)、經(jīng)濟(jì)學(xué)、生態(tài)學(xué)、神經(jīng)科學(xué)、物理學(xué)等。在多個(gè)時(shí)間點(diǎn)觀察或測(cè)量到的任何事物都可以形成一段時(shí)間序列。在進(jìn)行時(shí)間序列問(wèn)題分析時(shí),通常需要將字符串和datetime類(lèi)型相互轉(zhuǎn)換,本文分享他們之間相互轉(zhuǎn)換的集中常用方法(主要用到的庫(kù)有datetime、pandas以及dateutil)。
(一)datetime -> str
datetime類(lèi)型轉(zhuǎn)成str一般常用的有兩種方法:str和傳入格式化字符串的strftime方法。
1.str()類(lèi)型轉(zhuǎn)換
from datetime import datetime
stamp = datetime(2011, 1, 3)
stamp
str(stamp)
stamp.strftime('%Y-%m-%d')
(一)str -> datetime
將str轉(zhuǎn)成日期時(shí)間類(lèi)型有三種常用方法:一個(gè)是與strftime互逆的strptime方法、以及dateutil包的parse方法、還有pandas的to_datetime方法。
1.strptime方法
value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')
2.dateutil包中的parser.parse方法
from dateutil.parser import parse
parse('2011-01-03')
這個(gè)方法還有個(gè)很好的地方就是不用你顯示的給定編碼格式,dateutil可以解析幾乎所有人類(lèi)能夠理解的日期表示形式。
parse('Jan 31, 1997 10:45 PM')
在國(guó)際通用的格式中,日出現(xiàn)在月的前面很普遍,傳入dayfirst=True(默認(rèn)值為False)即可解決這個(gè)問(wèn)題.
parse('6/12/2011', dayfirst=True)
注意:parser是一個(gè)實(shí)用但不完美的工具。比如說(shuō),它會(huì)把一些原本不是日期的字符串認(rèn)作是日期(比如"42"會(huì)被解析為2042年的今天)。
3.pandas包的to_datetime方法
to_datetime方法可以解析多種不同的日期表示形式。對(duì)標(biāo)準(zhǔn)日期格式(如ISO8601)的解析非常快:
import pandas as pd
datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
pd.to_datetime(datestrs)
它還可以處理缺失值(None、空字符串等):
idx = pd.to_datetime(datestrs + [None])
idx
其中第三個(gè)元素為NaT:Not a Time。是pandas中時(shí)間戳數(shù)據(jù)的null值。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
