欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python時間日期函數與利用pandas進行時間序列處理詳解

系統 1837 0

python標準庫包含于日期(date)和時間(time)數據的數據類型,datetime、time以及calendar模塊會被經常用到。

datetime以毫秒形式存儲日期和時間,datetime.timedelta表示兩個datetime對象之間的時間差。

下面我們先簡單的了解下python日期和時間數據類型及工具

給datetime對象加上或減去一個或多個timedelta,會產生一個新的對象

            
from datetime import datetime
from datetime import timedelta

now = datetime.now()
now

datetime.datetime(2017, 6, 27, 15, 56, 56, 167000)

datetime參數:datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

delta = now - datetime(2017,6,27,10,10,10,10)
delta

datetime.timedelta(0, 20806, 166990)

delta.days

 0

delta.seconds

 20806

delta.microseconds

 166990
          

datetime模塊中的數據類型

類型 說明
date 以公歷形式存儲日歷日期(年、月、日)
time 將時間存儲為時、分、秒、毫秒
datetime 存儲日期和時間
timedelta 表示兩個datetime值之間的差(日、秒、毫秒)

字符串和datetime的相互轉換

1)python標準庫函數

日期轉換成字符串:利用str 或strftime

字符串轉換成日期:datetime.strptime

            
stamp = datetime(2017,6,27)

str(stamp)

 '2017-06-27 00:00:00'

stamp.strftime('%y-%m-%d')#%Y是4位年,%y是2位年

 '17-06-27'

#對多個時間進行解析成字符串

date = ['2017-6-26','2017-6-27']

datetime2 = [datetime.strptime(x,'%Y-%m-%d') for x in date]

datetime2

 [datetime.datetime(2017, 6, 26, 0, 0), datetime.datetime(2017, 6, 27, 0, 0)]

          

2)第三方庫dateutil.parser的時間解析函數

            
from dateutil.parser import parse

parse('2017-6-27')

 datetime.datetime(2017, 6, 27, 0, 0)

parse('27/6/2017',dayfirst =True)

 datetime.datetime(2017, 6, 27, 0, 0)
          

3)pandas處理成組日期

pandas通常用于處理成組日期,不管這些日期是DataFrame的軸索引還是列,to_datetime方法可以解析多種不同的日期表示形式。

            
date

 ['2017-6-26', '2017-6-27']

import pandas as pd

pd.to_datetime(date)



 DatetimeIndex(['2017-06-26', '2017-06-27'], dtype='datetime64[ns]', freq=None)
          

datetime 格式定義

代碼 說明
%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簡寫形式

pandas時間序列基礎以及時間、日期處理

pandas最基本的時間序列類型就是以時間戳(時間點)(通常以python字符串或datetime對象表示)為索引的Series:

            
dates = ['2017-06-20','2017-06-21',\
   '2017-06-22','2017-06-23','2017-06-24','2017-06-25','2017-06-26','2017-06-27']


import numpy as np
ts = pd.Series(np.random.randn(8),index = pd.to_datetime(dates))


ts

 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64

ts.index

 DatetimeIndex(['2017-06-20', '2017-06-21', '2017-06-22', '2017-06-23',
     '2017-06-24', '2017-06-25', '2017-06-26', '2017-06-27'],
     dtype='datetime64[ns]', freq=None)
          

pandas不同索引的時間序列之間的算術運算會自動按日期對齊

            
ts[::2]#從前往后每隔兩個取數據

 2017-06-20 0.788811
 2017-06-22 0.009967
 2017-06-24 0.981214
 2017-06-26 -0.127258
 dtype: float64

ts[::-2]#從后往前逆序每隔兩個取數據

 2017-06-27 1.919773
 2017-06-25 0.314127
 2017-06-23 -1.024626
 2017-06-21 0.372555
 dtype: float64

ts + ts[::2]#自動數據對齊

 2017-06-20 1.577621
 2017-06-21   NaN
 2017-06-22 0.019935
 2017-06-23   NaN
 2017-06-24 1.962429
 2017-06-25   NaN
 2017-06-26 -0.254516
 2017-06-27   NaN
 dtype: float64
          

索引為日期的Series和DataFrame數據的索引、選取以及子集構造

方法:
1).index[number_int]

2)[一個可以被解析為日期的字符串]

3)對于,較長的時間序列,只需傳入‘年'或‘年月'可返回對應的數據切片

4)通過時間范圍進行切片索引

            
ts

 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64

ts[ts.index[2]]

 0.0099673896063391908

ts['2017-06-21']#傳入可以被解析成日期的字符串

 0.37255538918121028

ts['21/06/2017']

 0.37255538918121028

ts['20170621']

 0.37255538918121028

ts['2017-06']#傳入年或年月

 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64

ts['2017-06-20':'2017-06-23']#時間范圍進行切片

 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 dtype: float64
          

帶有重復索引的時間序列

1).index.is_unique檢查索引日期是否是唯一的

2)對非唯一時間戳的數據進行聚合,通過groupby,并傳入level = 0(索引的唯一一層)

            
dates = pd.DatetimeIndex(['2017/06/01','2017/06/02','2017/06/02','2017/06/02','2017/06/03'])
dates

 DatetimeIndex(['2017-06-01', '2017-06-02', '2017-06-02', '2017-06-02',
     '2017-06-03'],
     dtype='datetime64[ns]', freq=None)

dup_ts = pd.Series(np.arange(5),index = dates)
dup_ts

 2017-06-01 0
 2017-06-02 1
 2017-06-02 2
 2017-06-02 3
 2017-06-03 4
 dtype: int32

dup_ts.index.is_unique

 False

dup_ts['2017-06-02']

 2017-06-02 1
 2017-06-02 2
 2017-06-02 3
 dtype: int32

grouped = dup_ts.groupby(level=0).mean()

grouped

 2017-06-01 0
 2017-06-02 2
 2017-06-03 4
 dtype: int32

dup_df = pd.DataFrame(np.arange(10).reshape((5,2)),index = dates )
dup_df
          

0 1
2017-06-01 0 1
2017-06-02 2 3
2017-06-02 4 5
2017-06-02 6 7
2017-06-03 8 9

            
grouped_df = dup_df.groupby(level=0).mean()##針對DataFrame

grouped_df
          

0 1
2017-06-01 0 1
2017-06-02 4 5
2017-06-03 8 9

本文總結了以下4個知識點

1)字符串、日期的轉換方法

2)日期和時間的主要python,datetime、timedelta、pandas.to_datetime等

3)以時間為索引的Series和DataFrame的索引、切片

4)帶有重復時間索引時的索引,.groupby(level=0)應用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 污视频免费观看网站 | 丁香久久 | 亚洲一级在线 | 久久中文精品 | 久久综合久 | 成人午夜AV亚洲精品无码网站 | 色www精品视频在线观看 | 国产精品成人在线观看 | 精品免费福利视频 | 国产小网站 | 全免费A敌肛交毛片免费 | xxxxhdvideosex | 亚洲国产精品久久久 | 欧美三级电影在线观看 | 天天摸天天操天天干 | 九九九九精品视频在线播放 | 欧美a级毛毛片免费视频试播 | 黄色三级在线观看 | 日韩av免费在线观看 | 欧美大码毛片在线播放 | 国产91亚洲精品 | 成人午夜网址 | 色午夜在线 | 久久久久久久国产 | 91香蕉视频在线看 | 日韩天天干 | 欧美久草 | 中文二区 | 四虎影院在线 | 久久新网址 | 日本在线视频网 | 日本在线你懂的 | 国产成人99 | 欧美成人伊人久久综合网 | 精品国产欧美一区二区 | 免费欧美黄色网址 | 亚洲第1页 | 久久久青青草 | 影音先锋中文字幕在线 | 午夜直播在线 | 亚洲免费黄色 |