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)缺失有那么幾行在作怪?。。?/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í)間,沒(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類型, default False
如果設(shè)定為True并且 parse_dates 可用,那么pandas將嘗試轉(zhuǎn)換為日期類型,如果可以轉(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)文章
Flask SocketIO實(shí)現(xiàn)動(dòng)態(tài)繪圖的示例詳解
Flask-SocketIO 是基于 Flask 的一個(gè)擴(kuò)展,用于簡(jiǎn)化在 Flask 應(yīng)用中集成 WebSocket 功能,本文主要介紹了Flask SocketIO如何實(shí)現(xiàn)動(dòng)態(tài)繪圖,需要的可以參考下2023-11-11Python實(shí)現(xiàn)求兩個(gè)csv文件交集的方法
這篇文章主要介紹了Python實(shí)現(xiàn)求兩個(gè)csv文件交集的方法,涉及Python針對(duì)csv文件的讀取、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Django admin.py 在修改/添加表單界面顯示額外字段的方法
今天小編就為大家分享一篇Django admin.py 在修改/添加表單界面顯示額外字段的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python argparse中的action=store_true用法小結(jié)
這篇文章主要介紹了Python argparse中的action=store_true用法小結(jié),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄
這篇文章主要為大家介紹了Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄應(yīng)用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Python?Fire實(shí)現(xiàn)自動(dòng)生成命令行接口
命令行程序是平時(shí)寫一些小工具時(shí)最常用的方式,隨著命令行程序功能的豐富,也就是參數(shù)多了以后,解析和管理參數(shù)之間的關(guān)系會(huì)變得越來(lái)越繁重,而本次介紹的?Fire?庫(kù)正好可以解決這個(gè)問(wèn)題,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧2023-09-09