pd.to_datetime中時間object轉換datetime實例
時間object轉換datetime實例
首先說一下:
- 1/17/07 has the format “%m/%d/%y”
- 17-1-2007 has the format “%d-%m-%Y”
這是一部分的時間轉換格式,通過以上的格式,你可以將DataFrame中的時間格式轉換為以下等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,這是轉換過后的形式,其實你可以將原數(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格式轉換時間,并添加到新的一列中去。
dara['date_parsed'].head() #查看一下結果 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ā)現(xiàn)應該是原數(shù)據(jù)有問題,部分時間數(shù)據(jù)格式有誤:
比如: 1965-01-02,這是正常時間格式,但是有的時間數(shù)據(jù)是:1965-01-028、1969-011-26 等情況,時間數(shù)據(jù)長度超過正常的len=10.
因此我們需要數(shù)據(jù)預處理,清洗數(shù)據(jù)。
數(shù)據(jù)預處理
方式一
添加一列記錄為每行時間的長度,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)缺失有那么幾行在作怪?。。?/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') # 再次轉換時間,沒有報錯 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ù)轉換時遇到不能轉換的數(shù)據(jù)轉為NaN的參數(shù)設置 errors='coerce'
Pandas 提供了一個可選的參數(shù) errors,傳入 errors='coerce',Pandas 遇到不能轉換的數(shù)據(jù)就會賦值為 NaN(Not a Number)
在這里,Pandas 遇到不能轉化的時間數(shù)據(jù)后會賦值 Nan 并跳過。
方式三
data['date_parsed'] = pd.to_datetime(data['Date'], infer_datetime_format=True)
infer_datetime_format: boolean類型, default False
如果設定為True并且 parse_dates 可用,那么pandas將嘗試轉換為日期類型,如果可以轉換,轉換方法并解析。在某些情況下會快5~10倍。
在這里,Pandas 遇到不能轉化的時間數(shù)據(jù)后會跳過。
參考:
到此這篇關于pd.to_datetime中時間object轉換datetime實例的文章就介紹到這了,更多相關pd.to_datetime 時間轉換datetime內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Flask SocketIO實現(xiàn)動態(tài)繪圖的示例詳解
Flask-SocketIO 是基于 Flask 的一個擴展,用于簡化在 Flask 應用中集成 WebSocket 功能,本文主要介紹了Flask SocketIO如何實現(xiàn)動態(tài)繪圖,需要的可以參考下2023-11-11
Django admin.py 在修改/添加表單界面顯示額外字段的方法
今天小編就為大家分享一篇Django admin.py 在修改/添加表單界面顯示額外字段的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python argparse中的action=store_true用法小結
這篇文章主要介紹了Python argparse中的action=store_true用法小結,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
Python使用Rich?type和TinyDB構建聯(lián)系人通訊錄
這篇文章主要為大家介紹了Python使用Rich?type和TinyDB構建聯(lián)系人通訊錄應用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

