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

01

系列回顧

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

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

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

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

以上3篇總結了Pandas主要的兩個數據結構:Series(一維)和DataFrame(二維),系統地介紹了創建,索引,增刪改查Series, DataFrame等常用操作介面,總結了Series如何裝載到DataFrame中,以及一個實際應用多個DataFrame的實戰項目例子。

值得推薦的是,Pandas廣泛應用在金融,統計,社會科學,和許多工程領域。Pandas和R語言直接無縫銜接。Pandas是基於Numpy(Numpy基於Python)基礎開發,因此能和帶有第三方庫的科學計算環境很好地進行集成。

02

Pandas核心應用場景

按照使用邏輯,盤點Pandas的主要可以做的事情:

  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操作。
  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)

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

接下來,按照以上未涉及的思路陸續推送,歡迎補充和指正。

03

多Index層級結構

Pandas中什麼是有層次的數據呢? 簡單來說,就是構造了一個有層次的Index實例,其他沒什麼不同。首先構造一個有層次的Index,如下:

#創建有層次的Index實例

index_name =[first,second]

lay_index = [[bar, bar, baz, baz, foo, foo, qux, qux],

[one, two, one, two, one, two, one, two]]

tuples = list(zip(*lay_index))

two_layers_index = pd.MultiIndex.from_tuples(tuples, names=index_name)

two_layers_index

有了Index實例,充填一個8行2列的數據values就行,如下所示:

res = np.array([list(np.random.randn(8)),list(np.random.randn(8))]).T # 8行2列

pd_h = pd.DataFrame(res, index=two_layers_index, columns = [A,B])

pd_h

得到數據如下,A, B 是列標籤,first, second是Index實例的標籤名稱。

這塊功能在實際使用中,暫時不常用,先不展開總結。

04

轉化操作

拿到一個數據表後,有時需要改變數據表的形狀,此時就要用到這塊功能: reshaping, pivot, transpose, sort等功能。

4.1 pivot

pivot是指按照指定的Index和columns,values旋轉原來的數據表。

#pivot

df = pd.DataFrame({ foo: [one,one,one,two,two,two],

bar: [A, B, C, A, B, C],

baz: [1, 2, 3, 4, 5, 6]})

df

數據顯示如下,可以看到數據的index是默認的從0開始的整數索引,columns是[bar,baz,foo],

ok,現在我想作如下轉化,index設置為foo, columns設置為bar, values設置為baz列,

df.pivot(index=foo, columns=bar,values=baz)

轉化後的結果如下顯示:

此時這種轉化,用肉眼觀察,是比較合理的,但是有時候為了觀察多個維度,我們可能需要大量的轉化實驗,比如,這樣設置行、列、值

df.pivot(index=bar, columns=baz, values=foo)

得到的結果如下,看出這種轉化出現比較多的None值,因為這種數據軸的設置導致的,但這是正常操作。

4.2 sort

Pandas的排序操作提供了2個主要的API,分別按照值排序和索引排序。值排序的介面:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=quicksort, na_position=last)

例子總結裡面所有可能的排序細節問題,首先構造一個DataFrame實例,如下所示:

df = pd.DataFrame({col1 : [A, A, B, np.nan, D, C], col2 : [2, 1, 9, 7, 7, 4], col3: [0, 1,np.nan,np.nan, 2, 3]})

df

按照col1和col3這兩列的值排序結果如下:

sort_1_3 = df.sort_values(by=[col1, col3])

sort_1_3

排序後的結果如下所示:

  1. 默認情況下,排序中等於NaN的值相應地位於後面,如果設置na_position=first,才會將NaN值位於前面;
  2. 排序默認不是就地排序,inplace=False;
  3. 多列排序中,第一個參數是主排序欄位,第二個參數是次排序欄位,也就是說如果第一個主排序欄位出現重複後,按照第二個欄位排序,依此類推。

以上總結了DataFrame主要能做的事情,初步了解多層 Index是怎麼回事,以及Pivot,Sort等操作介面。歡迎指正。

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

更多文章:

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

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

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

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

決策樹

對決策樹剪枝

sklearn分類和回歸

提煉出分類器演算法

貝葉斯分類

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

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

單詞拼寫糾正器python實現

半樸素貝葉斯分類器

支持向量機參數求解

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

重磅推薦:

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

2. 圖演算法(含樹)

3. 動態規劃

4. LeetCode

5. Python

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

8. 數據預處理

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

11. Tensorflow

12. 自然語言處理 13. 上海沙龍 如果文章對您有幫助,歡迎點贊、轉發。你的支持=彼此的進步

演算法channel ∣原創乾貨分享

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

微信群: gz113097485 QQ交流群:646901659


推薦閱讀:

簡單數據處理與分析
苦沙:建站研究 12:運營人員應該從哪些數據維度去分析平台表現?
知乎Live數據面面觀
Kaggle:電影數據分析
年輕用戶加速離網營銷建議

TAG:數據分析 | 數據處理 | 數據挖掘 |