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

溫馨提示×

溫馨提示×

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

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

python+pandas+時間、日期以及時間序列怎么處理

發布時間:2021-08-11 10:05:22 來源:億速云 閱讀:155 作者:小新 欄目:開發技術

小編給大家分享一下python+pandas+時間、日期以及時間序列怎么處理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

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

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

給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 格式定義

代碼說明
%Y4位數的年
%y2位數的年
%m2位數的月[01,12]
%d2位數的日[01,31]
%H時(24小時制)[00,23]
%l時(12小時制)[01,12]
%M2位數的分[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

01
2017-06-0101
2017-06-0223
2017-06-0245
2017-06-0267
2017-06-0389
grouped_df = dup_df.groupby(level=0).mean()##針對DataFrame
grouped_df

01
2017-06-0101
2017-06-0245
2017-06-0389

以上是“python+pandas+時間、日期以及時間序列怎么處理”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

临西县| 唐海县| 怀柔区| 乌什县| 务川| 隆子县| 维西| 横山县| 博爱县| 泸溪县| 金寨县| 大丰市| 临汾市| 金沙县| 烟台市| 红河县| 龙泉市| 峨眉山市| 广南县| 宝山区| 龙门县| 如东县| 古蔺县| 明光市| 孟津县| 岳阳县| 日土县| 和田市| 江华| 阿勒泰市| 康平县| 焉耆| 西安市| 文水县| 昭苏县| 尖扎县| 泸定县| 天长市| 改则县| 崇仁县| 山丹县|