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)的格式。這個格式并不能認出是時間格式,盡管我們一眼就能看出,但機器不行。
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)文章
python自動化測試之DDT數(shù)據(jù)驅(qū)動的實現(xiàn)代碼
這篇文章主要介紹了python自動化測試之DDT數(shù)據(jù)驅(qū)動的實現(xiàn)代碼,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
python pycharm最新版本激活碼(永久有效)附python安裝教程
PyCharm是一個多功能的集成開發(fā)環(huán)境,只需要在pycharm中創(chuàng)建python file就運行python,并且pycharm內(nèi)置完備的功能,這篇文章給大家介紹python pycharm激活碼最新版,需要的朋友跟隨小編一起看看吧2020-01-01
python學(xué)習(xí)之whl文件解釋與安裝詳解
whl格式本質(zhì)上是一個壓縮包,里面包含了py文件,以及經(jīng)過編譯的pyd文件,下面這篇文章主要給大家介紹了關(guān)于python學(xué)習(xí)之whl文件解釋與安裝的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-09-09
手把手教你用python發(fā)送短消息(基于阿里云平臺)
這篇文章主要介紹了手把手教你用python發(fā)送短消息(基于阿里云平臺),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

