Pandas中datetime數(shù)據(jù)類型的使用
Python內(nèi)置了datetime對象,可以在datetime庫中找到
from datetime import datetime now = datetime.now() now
還可以手動創(chuàng)建datetime
t2 = datetime(2023,4,21) now-t2 # datetime.timedelta(days=251, seconds=31427, microseconds=546921)
將pandas中的數(shù)據(jù)轉(zhuǎn)換成datetime
1.to_datetime函數(shù)
Timestamp是pandas用來替換python datetime.datetime的 可以使用to_datetime函數(shù)把數(shù)據(jù)轉(zhuǎn)換成Timestamp類型
import pandas as pd ebola = pd.read_csv(r'C:\Users\Administrator\Documents\WeChat Files\wxid_mgaxcaeufcpq22\FileStorage\File\2023-12\country_timeseries.csv') ebola.iloc[:5,:5]
從數(shù)據(jù)中看出 Date列是日期,但通過info查看加載后數(shù)據(jù)為object類型
某些場景下, (比如從csv文件中加載進(jìn)來的數(shù)據(jù)), 日期時間的數(shù)據(jù)會被加載成object類型, 此時需要手動的把這個字段轉(zhuǎn)換成日期時間類型可以通過to_datetime方法把Date列轉(zhuǎn)換為Timestamp,然后創(chuàng)建新列
ebola['date_dt'] = pd.to_datetime(ebola['Date']) ebola.info() # 18 date_dt 122 non-null datetime64[ns]
2.通過Timestamp創(chuàng)建
d=pd.Timestamp(2023,12,28) d # Timestamp('2023-12-28 00:00:00')
3 .通過parse_dates參數(shù)指定
ebola = pd.read_csv('data/country_timeseries.csv',parse_dates=[0]) ebola.info() # Date列轉(zhuǎn)換為datetime類型
提取日期的各個部分
d = pd.to_datetime('2023-04-20') # 可以看到得到的數(shù)據(jù)是Timestamp類型,通過Timestamp可以獲取年,月,日等部分 d.year d.month d.day
日期運(yùn)算和Timedelta
Ebola數(shù)據(jù)集中的Day列表示一個國家爆發(fā)Ebola疫情的天數(shù)。這一列數(shù)據(jù)可以通過日期運(yùn)算重建該列 疫情爆發(fā)的第一天(數(shù)據(jù)集中最早的一天)是2014-03-22。
計算疫情爆發(fā)的天數(shù)時,只需要用每個日期減去這個日期即可
獲取疫情爆發(fā)的第一天 ebola['Date'].min() 添加新列 ebola['outbreak_d'] = ebola['Date']-ebola['Date'].min() 查看數(shù)據(jù) ebola[['Date','Day','outbreak_d']].head() ebola[['Date','Day','outbreak_d']].tail()
banks['倒閉的季度'] = banks['Closing Date'].dt.quarter banks['倒閉的年份'] = banks['Closing Date'].dt.year
.dt.quarter和.dt.year可以獲取當(dāng)前日期的季度和年份
# 類似于這個方法 d=pd.Timestamp(2023,12,30) d.weekday()
closing_year = banks.groupby(['倒閉的年份'])['Bank Name'].count() closing_year # 2000,2 2001,4 2002,11 2003,3 2004,4 2007,3 2008,25 2009,140 2010,157 2011,92
基于日期數(shù)獲取數(shù)據(jù)子集
先將第一列數(shù)據(jù)處理為datetime類型
tesla = pd.read_csv(r'C:\Users\Administrator\Documents\WeChat Files\wxid_mgaxcaeufcpq22\FileStorage\File\2023-12\TSLA.csv',parse_dates=[0]) tesla.info()
tesla.loc[(tesla.Date.dt.year==2015) & (tesla.Date.dt.month == 8)]
將索引設(shè)為Date 列,然后可以查詢2015年8月的所有數(shù)據(jù)
tesla.set_index('Date',inplace=True) tesla['2015-08']
tesla['ref_date'] = tesla['Date']-tesla['Date'].min() tesla.set_index('ref_date',inplace=True) tesla.loc['1000 days']
日期范圍
使用date_range函數(shù)來創(chuàng)建連續(xù)的日期范圍
head_range = pd.date_range(start='2014-12-31',end='2015-01-05') head_range # 使用date_range函數(shù)創(chuàng)建日期序列時,可以傳入一個參數(shù)freq,默認(rèn)情況下freq取值為D,表示日期范圍內(nèi)的值是逐日遞增的 # DatetimeIndex(['2014-12-31', '2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04', '2015-01-05'], dtype='datetime64[ns]', freq='D')
包含日期的數(shù)據(jù)集中,并非每一個都包含固定頻率。比如在Ebola數(shù)據(jù)集中,日期并沒有規(guī)律 ebola.iloc[:,:5]
從上面的數(shù)據(jù)中可以看到,缺少2015年1月1日,2014年3月23日,如果想讓日期連續(xù),可以創(chuàng)建一個日期范圍來為數(shù)據(jù)集重建索引。
在freq傳入?yún)?shù)的基礎(chǔ)上,可以做一些調(diào)整 # 隔一個工作日取一個工作日 pd.date_range('2023-01-01','2023-01-07',freq='2B') freq傳入的參數(shù)可以傳入多個 #2023年每個月的第一個星期四 pd.date_range('2023-01-01','2023-12-31',freq='WOM-1THU') #每個月的第三個星期五 pd.date_range('2023-01-01','2023-12-31',freq='WOM-3FRI')
datetime類型案例
加載數(shù)據(jù) crime = pd.read_csv('data/crime.csv',parse_dates=['REPORTED_DATE']) 查看數(shù)據(jù) crime.info() 設(shè)置報警時間為索引 crime = crime.set_index('REPORTED_DATE') crime.head()
crime.loc['2016-05-12'] 查看某一段時間的犯罪記錄 crime.loc['2015-3-4':'2016-1-1'].sort_index() 時間段可以包括小時分鐘 crime.loc['2015-3-4 22':'2016-1-1 23:45:00'].sort_index()查詢凌晨兩點到五點的報警記錄 crime.between_time('2:00', '5:00', include_end=False)
查看發(fā)生在某個時刻的犯罪記錄 crime.at_time('5:47') 在按時間段選取數(shù)據(jù)時,可以將時間索引排序,排序之后再選取效率更高 crime_sort = crime.sort_index() %timeit crime.loc['2015-3-4':'2016-1-1'] %timeit crime_sort.loc['2015-3-4':'2016-1-1'] (%timeit是ipython的魔術(shù)函數(shù),可用于計時特定代碼段)
總結(jié):
Pandas中,datetime64用來表示時間序列類型
時間序列類型的數(shù)據(jù)可以作為行索引,對應(yīng)的數(shù)據(jù)類型是DatetimeIndex類型
datetime64類型可以做差,返回的是Timedelta類型
到此這篇關(guān)于Pandas中datetime數(shù)據(jù)類型的使用的文章就介紹到這了,更多相關(guān)Pandas datetime數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas將多個dataframe以多個sheet的形式保存到一個excel文件中
這篇文章主要介紹了pandas將多個dataframe以多個sheet的形式保存到一個excel文件中,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Python實例方法、類方法、靜態(tài)方法的區(qū)別與作用詳解
這篇文章主要介紹了Python實例方法、類方法、靜態(tài)方法的區(qū)別與作用,結(jié)合實例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計中實例方法、類方法、靜態(tài)方法的概念、原理、用法及相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Keras預(yù)訓(xùn)練的ImageNet模型實現(xiàn)分類操作
這篇文章主要介紹了Keras預(yù)訓(xùn)練的ImageNet模型實現(xiàn)分類操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python的pytest測試框架中fixture的使用詳解
這篇文章主要介紹了pytest中fixture的使用詳解,pytest是一個非常成熟的全功能的Python測試框架,能夠支持簡單的單元測試和復(fù)雜的功能測試,還可以用來做selenium/appnium等自動化測試、接口自動化測試,需要的朋友可以參考下2023-07-07PyTorch的自適應(yīng)池化Adaptive Pooling實例
今天小編就為大家分享一篇PyTorch的自適應(yīng)池化Adaptive Pooling實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01詳解使用 pyenv 管理多個版本 python 環(huán)境
本篇文章主要介紹了詳解使用 pyenv 管理多個版本 python 環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10