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

