pandas的to_datetime時(shí)間轉(zhuǎn)換使用及學(xué)習(xí)心得
前言
昨天在網(wǎng)賽中做了一道題,雖然是外國人的Englis題目,但是內(nèi)容很有學(xué)習(xí)的價(jià)值,值得仔細(xì)的學(xué)習(xí),今天就把我所收獲的一部分記錄下來。其一:做個(gè)學(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"
這是一部分的時(shí)間轉(zhuǎn)換格式,通過以上的格式,你可以將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)換過后的形式,其實(shí)你可以將原數(shù)據(jù)使用dtype查看列,來看它的格式。你會發(fā)現(xiàn)它是object形式的。這里說一下。這個(gè)object格式一般是python用來記錄可變化的兌現(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í)在使用上面語句轉(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)
一部分錯誤信息如上。
面對加載都要加載半天的數(shù)據(jù)出了錯誤,你真的是無助的,如果要去看數(shù)據(jù)怕是要看一天。
當(dāng)然有人會說不是有錯誤信息嗎?當(dāng)然我知道,但是一但當(dāng)信息量大了以后,當(dāng)時(shí)是茫然的?;税胩觳檎移渌麜r(shí)間的轉(zhuǎn)換方式。無果。于是靜下心來發(fā)現(xiàn)問題??梢钥闯鏊f有一下格式不能轉(zhuǎn)換。
'1975-02-23T02:58:41.000Z'
所以我又換了一種格式將時(shí)分秒都匹配了,又提醒年月日不匹配。反復(fù)的驗(yàn)證后發(fā)現(xiàn)應(yīng)該是原數(shù)據(jù)有問題,部分時(shí)間并不是同意的格式。哈哈發(fā)現(xiàn)問題了,我們可以修改了。
我第一次的修改方式為:
data['over_long'] = data['Date'].apply(len) #添加一列記錄沒行時(shí)間的長度 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)換時(shí)間,發(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)
兩個(gè)都能實(shí)現(xiàn)我試了一下。畢竟對to_datetime不太熟悉所以犯了錯。
OK!全部完成了。但是我想說的以上都不是最重要的。
最重要的是一種經(jīng)驗(yàn)的掌握。當(dāng)你面對大量的數(shù)據(jù)時(shí)千萬不要緊張,它們也是小數(shù)據(jù)構(gòu)成的,只要冷靜下來,你就能想到方法來解決。這才是我想說的!?。∨c君共勉。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。
- python3中datetime庫,time庫以及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庫中to_datetime()方法的使用解析
- pandas時(shí)間序列之如何將int轉(zhuǎn)換成datetime格式
- Python中的Pandas?時(shí)間函數(shù)?time?、datetime?模塊和時(shí)間處理基礎(chǔ)講解
- Pandas中datetime數(shù)據(jù)類型的使用
相關(guān)文章
django定期執(zhí)行任務(wù)(實(shí)例講解)
下面小編就為大家?guī)硪黄猟jango定期執(zhí)行任務(wù)(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11Python ARP掃描與欺騙實(shí)現(xiàn)全程詳解
這篇文章主要介紹了Python 實(shí)現(xiàn)ARP掃描與欺騙,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10Python提取PDF中的圖片的實(shí)現(xiàn)示例
本文主要介紹了Python提取PDF中的圖片的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07python使用matplotlib庫生成隨機(jī)漫步圖
這篇文章主要為大家詳細(xì)介紹了使用Python的matplotlib庫生成隨機(jī)漫步圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Python+wxPython實(shí)現(xiàn)合并多個(gè)文本文件
在?Python?編程中,我們經(jīng)常需有時(shí)候,我們可能需要將多個(gè)文本文件合并成一個(gè)文件,要處理文本文件,本文就來介紹下如何使用?wxPython?模塊編寫一個(gè)簡單的程序,能夠讓用戶選擇多個(gè)文本文件,感興趣的可以了解下2023-08-08Python實(shí)現(xiàn)簡易凱撒密碼的示例代碼
密碼的使用最早可以追溯到古羅馬時(shí)期,《高盧戰(zhàn)記》有描述愷撒曾經(jīng)使用密碼來傳遞信息,即所謂的“愷撒密碼”。本文將利用Python實(shí)現(xiàn)簡易的凱撒密碼,感興趣的可以了解一下2022-09-09