pandas處理時間序列(1):pd.Timestamp()、pd.Timedelta()、pd.datetime( )、 pd.Period()、pd.to_timestamp()、datet...

   Pandas庫是處理時間序列的利器,pandas有着強大的日期數據處理功能,能夠按日期篩選數據、按日期顯示數據、按日期統計數據。
 
pandas的實際類型主要分爲:
  • timestamp(時間戳)
  • period(時期)
  • timedelta(時間間隔)
經常使用的日期處理函數有:
  • pd.to_datetime()
  • pd.to_period()
  • pd.date_range()
  • pd.period_range
  • resample

1、定義時間格式

1. pd.Timestamp()、pd.Timedelta()

(1)Timestamp時間戳

#定義timestamp
t1=pd.Timestamp('2019-01-10')
t2=pd.Timestamp('2018-12-10')
print(f't1= {t1}')
print(f't2= {t2}')
print(f't1與t2時間間隔:{(t1-t2).days}天')

#獲取當前時間
now=pd.datetime.now()
print(now)
print(now.strftime('%Y-%m-%d'))

(2)Timedelta:實現datetime加減

對日期和時間進行加減實際上就是把datetime日後或往前計算,獲得新的datetime。加減能夠直接用+-運算符,不過須要導入timedelta這個類:python

#時間間隔
pd.Timedelta(days=5, minutes=50, seconds=20, milliseconds=10, microseconds=10, nanoseconds=10)

#計算當前時間日後100天的日期
dt=now+pd.Timedelta(days=100)
#只顯示年月日
dt.strftime('%Y-%m-%d')

2. pd.Period()

#定義時期period,默認是A-DEC,表明年份,以12月做爲最後一個月
p1=pd.Period('2019')
p2=pd.Period('2018')
print(f'p1={p1}年')
print(f'p2={p2}年')
print(f'p1和p2間隔{p1-p2}年')
#能夠直接+、-整數(表明年)
print(f'十年前是{p1-10}年')

#經過asfreq轉換時期頻率
#以第一個月算,p1前面已賦值爲2019年
p1.asfreq('M','start')

#以最後一個月算
p1.asfreq('M','end')

#財報季度
p=pd.Period('2019Q3',freq='Q-DEC')
#起始月日
print(p.asfreq('D','start'))
#結束月日
print(p.asfreq('D','end'))

3. pd.to_timestamp()

時期轉爲時間戳app

#時間戳和時期相互轉換
print(p1.to_timestamp(how='end'))
print(p1.to_timestamp(how='start'))

4. pd.to_period()

時間戳轉爲時期dom

#t1前面賦值爲'2019-1-10'
#轉換爲月時期
print(t1.to_period('M'))
#轉換爲日時期
print(t1.to_period('D'))
print(t1.to_period('W'))

5. pd.to_datetime() 

pandas.to_datetime(arg,errors ='raise',utc = None,format = None,unit = None )

(1)獲取指定的時間和日期

當數據不少,且日期格式不標準時的時候,能夠使用to_datetime,將DataFrame中的時間轉換成統一標準。函數

例如:df[''date]數據類型爲「object」,經過pd.to_datetime將該列數據轉換爲時間類型,即datetime。spa

df['date_formatted']=pd.to_datetime(df['date'],format='%Y-%m-%d')

經常使用時間:.net

(2)to_datetime能夠處理那些被認爲是缺失值的值(None、空字符串)

 

(3)將Str和Unicode轉化爲時間格式

 

 6. strptime和strftime

(1)字符串轉換成datetime格式: strptime

用戶輸入的日期和時間是字符串,要處理日期和時間,首先必須把str轉換爲datetime。轉換方法是經過datetime.strptime()實現,須要一個日期和時間的格式化字符串:3d

df_data1  = pd.DataFrame(columns=['date','values'])
df_data1['date'] = ['2019-01-01','2019-01-02','2019-01-03','2019-01-04','2019-01-05']
df_data1['values'] = np.random.randn(5)
df_data1

df_data1['date'] = df_data1['date'].map(lambda x:datetime.strptime(x,'%Y-%m-%d'))
df_data1

注意轉換後的datetime是沒有時區信息的。code

舉例:將分開的年月日時整合,並設置爲索引orm

數據集:對象

from datetime import datetime
# load data
def parse(x):
    return datetime.strptime(x, '%Y %m %d %H')
dataset = read_csv('raw.csv',  parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)
dataset.drop('No', axis=1, inplace=True)
# manually specify column names
dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']
dataset.index.name = 'date'

  

 

(2)datetime變回string格式: strftime

若是已經有了datetime對象,要把它格式化爲字符串顯示給用戶,就須要轉換爲str,轉換方法是經過strftime()實現的,一樣須要一個日期和時間的格式化字符串:

#定義一個DataFrame格式的數據df_data
df_data  = pd.DataFrame(columns=['date','values'])
df_data['date'] = pd.date_range('2019/01/01',periods=5)
df_data['values'] = np.random.randn(5)
df_data

用strftime把datetime格式的時間數據轉換成string

df_data['date'] = df_data['date'].apply(lambda x:x.strftime('%Y/%m')) #datetime格式轉成str

 

如下是時間格式定義

代碼  說明
%Y  4位數的年
%y  2位數的年
%m  2位數的月[01,12]
%d  2位數的日[01,31]
%H  時(24小時制)[00,23]
%l  時(12小時制)[01,12]
%M  2位數的分[00,59]
%S  秒[00,61]有閏秒的存在
%w  用整數表示的星期幾[0(星期天),6]
%F  %Y-%m-%d簡寫形式例如,2017-06-27
%D  %m/%d/%y簡寫形式

 

  

 

 

參考文獻:

【1】python的時間轉換datetime和pd.to_datetime

【2】pandas.to_datetime

相關文章
相關標籤/搜索