Python數據分析 之時間序列基礎

  1. 時間序列基礎數組

  import numpy as npdom

  import pandas as pdspa

  np.random.seed(12345).net

  import matplotlib.pyplot as plt3d

  plt.rc('figure', figsize=(10, 6))對象

  PREVIOUS_MAX_ROWS = pd.options.display.max_rowsblog

  pd.options.display.max_rows = 20排序

  np.set_printoptions(precision=4, suppress=True)索引

  pandas最基本的時間序列類型就是以時間戳(一般以Python字符串或datatime對象表示)爲索引的Series:內存

  from datetime import datetime

  dates = [datetime(2011, 1, 2), datetime(2011, 1, 5),

  datetime(2011, 1, 7), datetime(2011, 1, 8),

  datetime(2011, 1, 10), datetime(2011, 1, 12)]

  ts = pd.Series(np.random.randn(6), index=dates)

  ts

  這些datetime對象其實是被放在一個DatetimeIndex中的:

  ts.index

  

 

  跟其餘Series同樣,不一樣索引的時間序列之間的算術運算會自動按日期對 齊:

  print(ts[::2]) #每隔一個取一個

  ts + ts[::2]

  pandas用NumPy的datetime64數據類型以納秒形式存儲時間戳:

  ts.index.dtype

  

 

  DatetimeIndex中的各個標量值是pandas的Timestamp對象:

  stamp = ts.index[0]

  stamp

  

 

  只要有須要,TimeStamp能夠隨時自動轉換爲datetime對象。此外,它還能夠存儲頻率信息(若是有的話),且知道如何執行時區轉換以及其餘操做。 以後將對此進行詳細講解。

  2. 索引、選取、子集構造

  當你根據標籤索引選取數據時,時間序列和其它的pandas.Series很像:

  print(ts)

  stamp = ts.index[2]

  print(ts[stamp]) #標籤索引

  print(ts[2]) #整數索引

  還有一種更爲方便的用法:傳入一個能夠被解釋爲日期的字符串:

  print(ts['1/10/2011'])

  print(ts['20110110'])

  ts['2011-01-10']

  

 

  對於較長的時間序列,只需傳入「年」或「年月」便可輕鬆選取數據的切片:

  longer_ts = pd.Series(np.random.randn(1000),

  index=pd.date_range('1/1/2000', periods=1000))#天爲單位

  longer_ts

  longer_ts['2001']

  這裏,字符串「2001」被解釋成年,並根據它選取時間區間。指定月也一樣奏效:

  longer_ts['2001-05']

  datetime對象也能夠進行切片:

  print(ts)

  ts[datetime(2011, 1, 7):]

  因爲大部分時間序列數據都是按照時間前後排序的,所以你也能夠用不存在於該時間序列中的時間戳對其進行切片(即範圍查詢):

  ts['1/6/2011':'1/11/2011']

  

 

  跟以前同樣,你能夠傳入字符串日期、datetime或Timestamp進行索引。注意,這樣 切片所產生的是原時間序列的視圖(共享內存),跟NumPy數組的切片運算是同樣的。

  這意味着,沒有數據被複制,對切片進行修改會反映到原始數據上。

  此外,還有一個等價的實例方法也能夠截取兩個日期之間TimeSeries:

  ts.truncate(after='1/9/2011')無錫婦科醫院哪家好 http://www.xasgyy.net/

  

 

  這些操做對DataFrame也有效。例如,對DataFrame的行進行索引:

  dates = pd.date_range('1/1/2000', periods=100, freq='W-WED') #間隔單位爲周

  long_df = pd.DataFrame(np.random.randn(100, 4),

  index=dates,

  columns=['Colorado', 'Texas',

  'New York', 'Ohio'])

  long_df.loc['5-2001']

  3. 帶有重複索引值的時間序列

  在某些應用場景中,可能會存在多個觀測數據落在同一個時間點上的狀況。下面就是一個例子:

  dates = pd.DatetimeIndex(['1/1/2000', '1/2/2000', '1/2/2000',

  '1/2/2000', '1/3/2000'])

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

  dup_ts

  

 

  經過檢查索引的is_unique屬性,咱們就能夠知道它是否是惟一的:

  dup_ts.index.is_unique

  

 

  對這個時間序列進行索引,要麼產生標量值,要麼產生切片,具體要看所選的時間點是否重複:

  print(dup_ts['1/3/2000'])# not duplicated

  dup_ts['1/2/2000'] # duplicated

  

 

  假設你想要對具備非惟一時間戳的數據進行聚合。一個辦法是使用 groupby,並傳入level=0:

  grouped = dup_ts.groupby(level=0)

  print(grouped.mean())

  grouped.count()

相關文章
相關標籤/搜索