中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pandas的to_datetime時間轉換使用及學習心得

發布時間:2020-10-04 23:25:03 來源:腳本之家 閱讀:263 作者:不論如何未來很美好 欄目:開發技術

前言

昨天在網賽中做了一道題,雖然是外國人的Englis題目,但是內容很有學習的價值,值得仔細的學習,今天就把我所收獲的一部分記錄下來。其一:做個學習的資料記錄。其二:分享出來,供大家參考。

(收獲了對處理大數據的又一次認識!!!)

這是一道將DataFrame的日期數據轉換為python能認識的題目。這里重點講一下to_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,這是轉換過后的形式,其實你可以將原數據使用dtype查看列,來看它的格式。你會發現它是object形式的。這里說一下。這個object格式一般是python用來記錄可變化的兌現的格式。這個格式它并不能認出是時間格式,盡管我們一眼就能看出(人和機器的區別在此)。

data = pd.read_csv('path') #這里我們得到data數據
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格式轉換時間,并添加到新的一列中去。

dara['date_parsed'].head()  #查看一下結果
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]

可以看到不論形式還是類型都改變了,當然這只是一點皮毛,如果只是這里點,這個博客意義不大

其實在使用上面語句轉換時間是,并不是這么順利:

/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)

一部分錯誤信息如上。

面對加載都要加載半天的數據出了錯誤,你真的是無助的,如果要去看數據怕是要看一天。

當然有人會說不是有錯誤信息嗎?當然我知道,但是一但當信息量大了以后,當時是茫然的。花了半天查找其他時間的轉換方式。無果。于是靜下心來發現問題。可以看出它說有一下格式不能轉換。

'1975-02-23T02:58:41.000Z'

所以我又換了一種格式將時分秒都匹配了,又提醒年月日不匹配。反復的驗證后發現應該是原數據有問題,部分時間并不是同意的格式。哈哈發現問題了,我們可以修改了。

我第一次的修改方式為:

data['over_long'] = data['Date'].apply(len)  #添加一列記錄沒行時間的長度
data.loc[data['over_long'] > 10]  #輸出大于正常數據的行  這里會發現缺失有那么幾行在作怪!!!
normal_dates = data.loc[data['over_long'] < 11]  #篩選出正常數據
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)  #輸出查看沒問題的

以上是我的第一次解決方法。

后續在別人的指導下了解了其他的幾種更好的方法。(畢竟我刪除數據的方式不好)

第一種和第二種:

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)

兩個都能實現我試了一下。畢竟對to_datetime不太熟悉所以犯了錯。

OK!全部完成了。但是我想說的以上都不是最重要的。

最重要的是一種經驗的掌握。當你面對大量的數據時千萬不要緊張,它們也是小數據構成的,只要冷靜下來,你就能想到方法來解決。這才是我想說的!!!與君共勉。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石景山区| 鹰潭市| 五河县| 大石桥市| 土默特左旗| 南乐县| 三明市| 满城县| 富平县| 万盛区| 双鸭山市| 同心县| 永安市| 舟曲县| 辉南县| 津市市| 化州市| 清新县| 雷州市| 天门市| 镇远县| 瓮安县| 陆良县| 北碚区| 綦江县| 炎陵县| 郯城县| 阜阳市| 阳泉市| 宣化县| 崇信县| 沐川县| 太和县| 育儿| 陵水| 焦作市| 潼关县| 许昌县| 大城县| 广州市| 丰原市|