pandas的to_datetime時(shí)間轉(zhuǎn)換使用及學(xué)習(xí)心得
前言
昨天在網(wǎng)賽中做了一道題,雖然是外國(guó)人的Englis題目,但是內(nèi)容很有學(xué)習(xí)的價(jià)值,值得仔細(xì)的學(xué)習(xí),今天就把我所收獲的一部分記錄下來(lái)。其一:做個(gè)學(xué)習(xí)的資料記錄。其二:分享出來(lái),供大家參考。
(收獲了對(duì)處理大數(shù)據(jù)的又一次認(rèn)識(shí)?。。。?br />
這是一道將DataFrame的日期數(shù)據(jù)轉(zhuǎn)換為python能認(rèn)識(shí)的題目。這里重點(diǎn)講一下to_datetime的部分使用。
首先說(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]
看見(jiàn)沒(méi)有dtype:datetime64,這是轉(zhuǎn)換過(guò)后的形式,其實(shí)你可以將原數(shù)據(jù)使用dtype查看列,來(lái)看它的格式。你會(huì)發(fā)現(xiàn)它是object形式的。這里說(shuō)一下。這個(gè)object格式一般是python用來(lái)記錄可變化的兌現(xiàn)的格式。這個(gè)格式它并不能認(rèn)出是時(shí)間格式,盡管我們一眼就能看出(人和機(jī)器的區(qū)別在此)。
data = pd.read_csv('path') #這里我們得到data數(shù)據(jù)
data['date'].heade() #查看一下日期列的樣子
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é)果
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]
可以看到不論形式還是類型都改變了,當(dāng)然這只是一點(diǎn)皮毛,如果只是這里點(diǎn),這個(gè)博客意義不大
其實(shí)在使用上面語(yǔ)句轉(zhuǎn)換時(shí)間是,并不是這么順利:
/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)
一部分錯(cuò)誤信息如上。
面對(duì)加載都要加載半天的數(shù)據(jù)出了錯(cuò)誤,你真的是無(wú)助的,如果要去看數(shù)據(jù)怕是要看一天。
當(dāng)然有人會(huì)說(shuō)不是有錯(cuò)誤信息嗎?當(dāng)然我知道,但是一但當(dāng)信息量大了以后,當(dāng)時(shí)是茫然的。花了半天查找其他時(shí)間的轉(zhuǎn)換方式。無(wú)果。于是靜下心來(lái)發(fā)現(xiàn)問(wèn)題??梢钥闯鏊f(shuō)有一下格式不能轉(zhuǎn)換。
'1975-02-23T02:58:41.000Z'
所以我又換了一種格式將時(shí)分秒都匹配了,又提醒年月日不匹配。反復(fù)的驗(yàn)證后發(fā)現(xiàn)應(yīng)該是原數(shù)據(jù)有問(wèn)題,部分時(shí)間并不是同意的格式。哈哈發(fā)現(xiàn)問(wèn)題了,我們可以修改了。
我第一次的修改方式為:
data['over_long'] = data['Date'].apply(len) #添加一列記錄沒(méi)行時(shí)間的長(zhǎng)度 data.loc[data['over_long'] > 10] #輸出大于正常數(shù)據(jù)的行 這里會(huì)發(fā)現(xiàn)缺失有那么幾行在作怪?。。?/pre>
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í)間,發(fā)現(xiàn)沒(méi)有報(bào)錯(cuò)了 哈哈 normal_dates['data_parsed'].head(10) #輸出查看沒(méi)問(wèn)題的
以上是我的第一次解決方法。
后續(xù)在別人的指導(dǎo)下了解了其他的幾種更好的方法。(畢竟我刪除數(shù)據(jù)的方式不好)
第一種和第二種:
data['date_parsed'] = pd.to_datetime(data['Date'], format = "%m/%d/%Y", errors = 'coerce')
data['date_parsed'] = pd.to_datetime(data['Date'],infer_datetime_format=True)
兩個(gè)都能實(shí)現(xiàn)我試了一下。畢竟對(duì)to_datetime不太熟悉所以犯了錯(cuò)。
OK!全部完成了。但是我想說(shuō)的以上都不是最重要的。
最重要的是一種經(jīng)驗(yàn)的掌握。當(dāng)你面對(duì)大量的數(shù)據(jù)時(shí)千萬(wàn)不要緊張,它們也是小數(shù)據(jù)構(gòu)成的,只要冷靜下來(lái),你就能想到方法來(lái)解決。這才是我想說(shuō)的?。?!與君共勉。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- python3中datetime庫(kù),time庫(kù)以及pandas中的時(shí)間函數(shù)區(qū)別與詳解
- pandas時(shí)間序列之pd.to_datetime()的實(shí)現(xiàn)
- pandas如何將datetime64[ns]轉(zhuǎn)為字符串日期
- Pandas如何將Timestamp轉(zhuǎn)為datetime類型
- pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn)
- pandas庫(kù)中to_datetime()方法的使用解析
- pandas時(shí)間序列之如何將int轉(zhuǎn)換成datetime格式
- Python中的Pandas?時(shí)間函數(shù)?time?、datetime?模塊和時(shí)間處理基礎(chǔ)講解
- Pandas中datetime數(shù)據(jù)類型的使用
相關(guān)文章
python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積
Python是最常用的編程語(yǔ)言,這種語(yǔ)言就是一種可以快速開(kāi)發(fā)應(yīng)用的解釋型語(yǔ)言,有些用戶不知道該怎么在Python編程里計(jì)算圓的面積,現(xiàn)在就給大家具體解釋一下,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)編程小實(shí)例之計(jì)算圓的面積的相關(guān)資料,需要的朋友可以參考下2023-03-03
Pytorch中transforms.Resize()的簡(jiǎn)單使用
這篇文章主要介紹了Pytorch中transforms.Resize()的簡(jiǎn)單使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
tensorboard 可視化之localhost:6006不顯示的解決方案
這篇文章主要介紹了tensorboard 可視化之localhost:6006不顯示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
深入學(xué)習(xí)Python中的上下文管理器與else塊
這篇文章主要給大家介紹了關(guān)于Python中上下文管理器與else塊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI
這篇文章主要教大家如何輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Python 安裝setuptools和pip工具操作方法(必看)
下面小編就為大家?guī)?lái)一篇Python 安裝setuptools和pip工具操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05

