pd.to_datetime中時(shí)間object轉(zhuǎn)換datetime實(shí)例
時(shí)間object轉(zhuǎn)換datetime實(shí)例
首先說(shuō)一下:
- 1/17/07 has the format “%m/%d/%y”
- 17-1-2007 has the format “%d-%m-%Y”
這是一部分的時(shí)間轉(zhuǎn)換格式,通過(guò)以上的格式,你可以將DataFrame中的時(shí)間格式轉(zhuǎn)換為以下等python格式:
0 2007-03-02 1 2007-03-22 2 2007-04-06 3 2007-04-14 4 2007-04-15 Name: date_parsed, dtype: datetime64[ns]
dtype:datetime64,這是轉(zhuǎn)換過(guò)后的形式,其實(shí)你可以將原數(shù)據(jù)使用dtype查看列,來(lái)看它的格式。你會(huì)發(fā)現(xiàn)它是object形式的。這個(gè)object格式一般是python用來(lái)記錄可變化的兌現(xiàn)的格式。這個(gè)格式并不能認(rèn)出是時(shí)間格式,盡管我們一眼就能看出,但機(jī)器不行。
data = pd.read_csv('path') # 獲取data數(shù)據(jù)
data['date'].head() # 查看一下日期列0 01/02/1965 1 01/04/1965 2 01/05/1965 3 01/08/1965 4 01/09/1965 Name: Date, dtype: object
可以看出它為object格式,并非日期格式。
data['date_parsed'] = pd.to_datetime(data['date'], format="%m/%d/%y")
上面我們按python格式轉(zhuǎn)換時(shí)間,并添加到新的一列中去。
dara['date_parsed'].head() #查看一下結(jié)果 1 0 1965-01-02 1 1965-01-04 2 1965-01-05 3 1965-01-08 4 1965-01-09 Name: data_parsed, dtype: datetime64[ns]
處理過(guò)程中可能會(huì)出現(xiàn)問(wèn)題:
/opt/conda/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
271 try:
272 result = array_strptime(arg, format, exact=exact,
--> 273 errors=errors)
274 except tslib.OutOfBoundsDatetime:
275 if errors == 'raise':
pandas/_libs/tslibs/strptime.pyx in pandas._libs.tslibs.strptime.array_strptime()
ValueError: time data '1975-02-23T02:58:41.000Z' does not match format '%m/%d/%Y' (match)
反復(fù)的驗(yàn)證后發(fā)現(xiàn)應(yīng)該是原數(shù)據(jù)有問(wèn)題,部分時(shí)間數(shù)據(jù)格式有誤:
比如: 1965-01-02,這是正常時(shí)間格式,但是有的時(shí)間數(shù)據(jù)是:1965-01-028、1969-011-26 等情況,時(shí)間數(shù)據(jù)長(zhǎng)度超過(guò)正常的len=10.
因此我們需要數(shù)據(jù)預(yù)處理,清洗數(shù)據(jù)。
數(shù)據(jù)預(yù)處理
方式一
添加一列記錄為每行時(shí)間的長(zhǎng)度,apply(len):傳入len()函數(shù),處理Date列數(shù)據(jù)。
data['over_long'] = data['Date'].apply(len) # 添加一列記錄為每行時(shí)間的長(zhǎng)度,apply(len):傳入len()函數(shù) data.loc[data['over_long'] > 10] # 輸出大于正常數(shù)據(jù)的行 這里會(huì)發(fā)現(xiàn)缺失有那么幾行在作怪?。?!
正常處理:
normal_dates = data.loc[data['over_long'] < 11] # 篩選出正常數(shù)據(jù) normal_dates = normal_dates.copy() # 拷貝 normal_dates['data_parsed'] = pd.to_datetime(normal_dates['Date'],format='%m/%d/%Y') # 再次轉(zhuǎn)換時(shí)間,沒(méi)有報(bào)錯(cuò) normal_dates['data_parsed'].head(10) # 輸出查看沒(méi)問(wèn)題的數(shù)據(jù)
方式二
data['date_parsed'] = pd.to_datetime(data['Date'], format = "%m/%d/%Y", errors = 'coerce')
errors = 'coerce'
Pandas數(shù)據(jù)轉(zhuǎn)換時(shí)遇到不能轉(zhuǎn)換的數(shù)據(jù)轉(zhuǎn)為NaN的參數(shù)設(shè)置 errors='coerce'
Pandas 提供了一個(gè)可選的參數(shù) errors,傳入 errors='coerce',Pandas 遇到不能轉(zhuǎn)換的數(shù)據(jù)就會(huì)賦值為 NaN(Not a Number)
在這里,Pandas 遇到不能轉(zhuǎn)化的時(shí)間數(shù)據(jù)后會(huì)賦值 Nan 并跳過(guò)。
方式三
data['date_parsed'] = pd.to_datetime(data['Date'], infer_datetime_format=True)
infer_datetime_format: boolean類(lèi)型, default False
如果設(shè)定為T(mén)rue并且 parse_dates 可用,那么pandas將嘗試轉(zhuǎn)換為日期類(lèi)型,如果可以轉(zhuǎn)換,轉(zhuǎn)換方法并解析。在某些情況下會(huì)快5~10倍。
在這里,Pandas 遇到不能轉(zhuǎn)化的時(shí)間數(shù)據(jù)后會(huì)跳過(guò)。
參考:
到此這篇關(guān)于pd.to_datetime中時(shí)間object轉(zhuǎn)換datetime實(shí)例的文章就介紹到這了,更多相關(guān)pd.to_datetime 時(shí)間轉(zhuǎn)換datetime內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python自動(dòng)化測(cè)試之DDT數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)代碼
這篇文章主要介紹了python自動(dòng)化測(cè)試之DDT數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
python pycharm最新版本激活碼(永久有效)附python安裝教程
PyCharm是一個(gè)多功能的集成開(kāi)發(fā)環(huán)境,只需要在pycharm中創(chuàng)建python file就運(yùn)行python,并且pycharm內(nèi)置完備的功能,這篇文章給大家介紹python pycharm激活碼最新版,需要的朋友跟隨小編一起看看吧2020-01-01
python學(xué)習(xí)之whl文件解釋與安裝詳解
whl格式本質(zhì)上是一個(gè)壓縮包,里面包含了py文件,以及經(jīng)過(guò)編譯的pyd文件,下面這篇文章主要給大家介紹了關(guān)于python學(xué)習(xí)之whl文件解釋與安裝的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
手把手教你用python發(fā)送短消息(基于阿里云平臺(tái))
這篇文章主要介紹了手把手教你用python發(fā)送短消息(基于阿里云平臺(tái)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

