玩轉Pandas,讓數據處理更easy系列7

01

系列回顧

玩轉Pandas系列已經連續推送6篇,盡量貼近Pandas的本質原理,結合工作實踐,按照使用Pandas的邏輯步驟,系統地並結合實例推送Pandas的主要常用功能,已經推送的6篇文章:

玩轉Pandas,讓數據處理更easy系列1

玩轉Pandas,讓數據處理更easy系列2

玩轉Pandas,讓數據處理更easy系列3

玩轉Pandas,讓數據處理更easy系列4

玩轉Pandas,讓數據處理更easy系列5

玩轉Pandas,讓數據處理更easy系列6

至此,如果您閱讀了以上6篇文章,應該對使用Pandas有一個比較好的認識和體會了。

其中DataFrame表達的是二維結構,DataFrame實例調用介面返回的結構常用Series來表達,這是一種一維描述。再進一步,這兩種結構都用Index做標籤索引,大家應該意識到任何類型都可以用來做索引,比如list, tuple, str, dict... ,並且每個單元格的取值也可以是任意的。

使用Pandas庫,時刻腦海中要記住這兩個數據結構,二維,一維,切換,介面操作返回的類型等。

Pandas主要能做10件事,下面再看下這些事,哪些還未涉及。

02

Pandas能做什麼

Pandas主要能做10件事,現在已經推送了其中大部分,儘管有些點沒有深入展開:

  1. 能將Python, Numpy的數據結構靈活地轉換為Pandas的DataFrame結構(玩轉Pandas,讓數據處理更easy系列1; 玩轉Pandas,讓數據處理更easy系列2)
  2. DataFrame可以方便地實現增加和刪除行、列 ( 玩轉Pandas,讓數據處理更easy系列2)
  3. 智能地帶標籤的切片,好玩的索引提取大數據集的子集(玩轉Pandas,讓數據處理更easy系列2 )
  4. 自動數據對齊,完全可以不考慮行、列標籤,直接append list.
  5. 靈活地對數據集Reshape和按照不同軸變化數據的Pivot操作。玩轉Pandas,讓數據處理更easy系列4
  6. 強大的I/O操作。提供介面: CSV and delimited, Excel files, databases, and saving / loading data from the ultrafast HDF5 format.(玩轉Pandas,讓數據處理更easy系列2)
  7. 通俗易懂地在DataFrame結構上實現merge和join操作(merge操作見:玩轉Pandas,讓數據處理更easy系列3, concat: 玩轉Pandas,讓數據處理更easy系列5)

  8. 善於處理missing data,如NaN, non-floating數據(玩轉Pandas,讓數據處理更easy系列5)
  9. 強大而靈活的分組功能,在數據集上實現分-應用-合的操作,達到整合和改變數據形狀的目的 (玩轉Pandas,讓數據處理更easy系列6)
  10. 時間序列的處理功能,生成 data range,移動的時間窗,時間移動和lagging等。

對於時間序列的處理也是Pandas的重要方面,Pandas提供了什麼數據結構支撐,常用的操作介面都有哪些呢?

03

日期時間模塊簡介

Pandas已經成功運用在了對時間序列數據的處理上,尤其是在金融數據分析領域。大家都知道,Pandas是建立在Numpy之上的,所以時間序列處理上也基於Numpy的datetime64和timedelta64類型,它又創建了一些列好用的功能來處理時間序列。

Pandas提供了一個相對緊湊的介面處理以下日期時間處理,對時間處理的特長在於:

  • 創建基於一定頻率的日期和時間序列;
  • 轉化時間序列為特定的頻次;
  • 計算相對日期的能力強大,比如計算某年的最後一個工作日前的5個工作日序列;

04

時間索引:DateTimeIndex

創建日期序列用date_range介面,傳入日期的開始日期,周期,頻次按天還是小時等,個數一共為72個,截取前5個顯示如下,返回值的類型為DateTimeIndex,因此也是一個Index實例,自然可以當做 index.

rng = pd.date_range(1/1/2011, periods=72, freq=H)

用創建的rng當做index創建Series實例:

ts = pd.Series(np.random.randn(len(rng)), index=rng)

ts.head(5)

另Pandas還提供了修改時間周期的介面 asfreq, 直接拿Series實例調用asfreq,如下所示:

ts.asfreq(45Min, method=pad)

還可以按天統計數據值得平均值,得到1-1到1-3日的平均值:

ts.resample(D).mean()

上面說到,date_range可以創建DateTimeIndex類實例,通過以下方式也可以創建出DateTimeIndex實例,

to_datetime,

pd.to_datetime( [2018-3-28,2018-3-29] )

DatetimeIndex構造函數也可以構建。

bdate_range() 也可以創建DateTimeIndex,它生成的是只有工作日的時間索引。

另,pd.date_range(1/1/2011, periods=72, freq=H) 中的freq可以有多種配置,

如 freq 配置為 W,表示只生成周末的日期索引,其他用到再查詢文檔就行。

05

時間戳和Period

時間戳是一個具體的時間點,2018-1-1 12:00:00, 它與接下來說的Period不同,Period是一個日期範圍,比如 2018-01-01,2018-01.

pd.Timestamp(2018-5-1)

生成的實例為:Timestamp(2018-05-01 00:00:00),可以看到是帶有日期和時間的結合。

而Period實例是這樣的,是一個月份,如下,大家注意區分兩者不同。

pd.Period(2018-05)

Period(2018-05, M)

pd.Period(2018-05, freq=D)

Period(2018-05-01, D)

如何將一個Series實例轉化為一個時間戳呢?如下所示的實例,調用to_datetime轉化為時間戳。

ts1 = pd.Series([Jul 31, 2009, 2010-01-10, None])

pd.to_datetime(ts1)

另,還可以按照一定的時間格式轉化,將如下的時間格式,轉化為默認的時間格式,

pd.to_datetime(12-11-2010 00:00, format=%d-%m-%Y %H:%M)

輸出結果:Timestamp(2010-11-12 00:00:00)

另,還提供Epoch轉化為時間格式等功能, 詳見官方文檔。

06

PeriodIndex

Period也對應自己的索引,構建一個Series實例,其中ts2.index就是一個PeriodsIndex實例。

periods = [pd.Period(2012-01), pd.Period(2012-02), pd.Period(2012-03)]

ts2 = pd.Series(np.random.randn(3), periods)

ts2.index

07

時間偏移相關對象

原python庫中已經有了時間偏移相關的處理類,主要用到以下幾個:

import datetime

from dateutil.relativedelta import relativedelta

Pandas在原python模塊基礎上也做了一些封裝改進成了 DateOffset。

原python的寫法:

d = datetime.datetime(2008, 8, 18, 9, 0)

d + relativedelta(months=4, days=5)

調用Pandas中的DateOffset後,

from pandas.tseries.offsets import *

d + DateOffset(months=4, days=5)

DateOffset主要方便之處在於可以直接做加減,比如,今天往回退5個工作日的時間戳:

d = pd.Timestamp(2018-03-28 09:00:00)

d- 5 * BDay()

返回結果:

Timestamp(2018-03-21 09:00:00)

其他更多功能,詳細過程在參考官方文檔:

pandas.pydata.org/panda

如想下載以上代碼,請後台回復: pandas

小編對所推文章分類整理,歡迎後台回複數字,查找感興趣的文章: 1. 排序演算法

2. 圖演算法(含樹)

3. 動態規劃

4. LeetCode

5. Python

6. 數據處理三劍客 7. 數學知識

8. 數據預處理

9. 機器學習演算法實例大全 10. 深度學習

11. Tensorflow

12. 自然語言處理 13. 上海沙龍

更多文章:

深度學習|大師之作,必是精品

演算法channel關鍵詞和文章索引

邏輯回歸| 原理解析及代碼實現

邏輯回歸| 演算法兌現為python代碼

決策樹

對決策樹剪枝

sklearn分類和回歸

提煉出分類器演算法

貝葉斯分類

樸素貝葉斯分類器:例子解釋

樸素貝葉斯分類:拉普拉斯修正

單詞拼寫糾正器python實現

半樸素貝葉斯分類器

支持向量機參數求解

支持向量機之軟間隔和核函數

如果文章對您有幫助,歡迎點贊、轉發。你的支持=彼此的進步

演算法channel ∣原創乾貨分享

weixin.qq.com/r/cjhGXpj (二維碼自動識別)

微信群: gz113097485 QQ交流群:646901659


推薦閱讀:

手把手教你使用ggplot2繪製折線圖
坐擁百億級數據的劉濤 如何窺探數據背後的深意
數據缺失值的4種處理方法
閑話國內大數據發展簡史&產業化落地
《Python數據挖掘》筆記(四) 網路分析

TAG:數據挖掘 | 大數據 | 數據分析 |