pd.to_datetime中時間object轉(zhuǎn)換datetime實例
時間object轉(zhuǎn)換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ù)據(jù)使用dtype查看列,來看它的格式。你會發(fā)現(xiàn)它是object形式的。這個object格式一般是python用來記錄可變化的兌現(xiàn)的格式。這個格式并不能認(rèn)出是時間格式,盡管我們一眼就能看出,但機器不行。
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)換時間,并添加到新的一列中去。
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]
處理過程中可能會出現(xià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ù)的驗證后發(fā)現(xiàn)應(yīng)該是原數(shù)據(jù)有問題,部分時間數(shù)據(jù)格式有誤:
比如: 1965-01-02,這是正常時間格式,但是有的時間數(shù)據(jù)是:1965-01-028、1969-011-26 等情況,時間數(shù)據(jù)長度超過正常的len=10.
因此我們需要數(shù)據(jù)預(yù)處理,清洗數(shù)據(jù)。
數(shù)據(jù)預(yù)處理
方式一
添加一列記錄為每行時間的長度,apply(len):傳入len()函數(shù),處理Date列數(shù)據(jù)。
data['over_long'] = data['Date'].apply(len) # 添加一列記錄為每行時間的長度,apply(len):傳入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)換時間,沒有報錯 normal_dates['data_parsed'].head(10) # 輸出查看沒問題的數(shù)據(jù)
方式二
data['date_parsed'] = pd.to_datetime(data['Date'], format = "%m/%d/%Y", errors = 'coerce')
errors = 'coerce'
Pandas數(shù)據(jù)轉(zhuǎn)換時遇到不能轉(zhuǎn)換的數(shù)據(jù)轉(zhuǎn)為NaN的參數(shù)設(shè)置 errors='coerce'
Pandas 提供了一個可選的參數(shù) errors,傳入 errors='coerce',Pandas 遇到不能轉(zhuǎn)換的數(shù)據(jù)就會賦值為 NaN(Not a Number)
在這里,Pandas 遇到不能轉(zhuǎn)化的時間數(shù)據(jù)后會賦值 Nan 并跳過。
方式三
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)換方法并解析。在某些情況下會快5~10倍。
在這里,Pandas 遇到不能轉(zhuǎn)化的時間數(shù)據(jù)后會跳過。
參考:
到此這篇關(guān)于pd.to_datetime中時間object轉(zhuǎn)換datetime實例的文章就介紹到這了,更多相關(guān)pd.to_datetime 時間轉(zhuǎn)換datetime內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flask SocketIO實現(xiàn)動態(tài)繪圖的示例詳解
Flask-SocketIO 是基于 Flask 的一個擴展,用于簡化在 Flask 應(yīng)用中集成 WebSocket 功能,本文主要介紹了Flask SocketIO如何實現(xiàn)動態(tài)繪圖,需要的可以參考下2023-11-11Django admin.py 在修改/添加表單界面顯示額外字段的方法
今天小編就為大家分享一篇Django admin.py 在修改/添加表單界面顯示額外字段的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python argparse中的action=store_true用法小結(jié)
這篇文章主要介紹了Python argparse中的action=store_true用法小結(jié),本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄
這篇文章主要為大家介紹了Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄應(yīng)用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08