一文帶你了解pandas的DataFrame
在使用Python進行數據分析時,最常用的莫過於pandas包中的二維數據結構DataFrame(數據框),因為它可容納不同的列數據類型,十分貼合實際應用。了解並掌握DataFrame的脾氣秉性格外重要,如果不了解它是什麼、包含什麼,那麼你將不能靈活控制它,本文將帶你走進pandas的DataFrame,來看看它到底是什麼?
1. 先聊聊numpy
pandas包中的數據結構是以numpy包作為基礎,只不過增添了一些專門適合數據分析的功能和屬性。
numpy中一維和二維數據結構均為ndarray,一般情況下,它存儲的數據類型都是「數」,包括:整數、浮點數、複數。numpy具有著優秀的矩陣計算性能,可謂專為「算數」而生,其計算速度特別快,特別適合大數據的計算。
若要使用numpy,首先要導入該包:import numpy as np
創建numpy一維數組,需要傳入一個列表參數,其元素查找方式類似於列表,但又和列表有著截然不同的區別:
區別一:array數組元素的數據類型必須一致,列表可以包含不同的數據類型
區別二:array可以進行向量計算
區別三:array具有統計功能
區別四:array數組乘以標量n表示每個元素值放大n倍,列表乘以標量n表示重複n次
請看下圖:

numpy二維數組則是一個矩陣,較一維數組多了一個「軸」,有行也有列。
類似地,創建numpy二維數組,傳入一個嵌套列表即可,每個子列表的元素數目相同,有多少個子列表,二維數組就有多少行。

其元素的查詢方式可通過「[行標,列標]」的方式,如果要查詢一行或一列,則用冒號(:)來代替。
在統計功能方面,二維數組較一維數組多了個「軸選項」,axis=0表示按列統計,axis=1表示按行統計。如果不加「軸選項」參數,則默認按整個數組計算統計量。如下圖:

2. 開啟pandas
剛才說了,pandas是以numpy為基礎開發而來,它具有所有numpy優秀計算性能,額外又增加了適合數據分析的成分。來看看都增添了些什麼?
在下面的研究前,先導入pandas包:import pandas as pd
pandas一維數據結構:Series(向量)
在創建Series向量的時候,向其傳入一個array一維數組,然後可顯式指定其索引index,如果不指定index,則系統默認生成整數型索引0 1 2 3……這裡的索引index指的是行索引,行索引具有一個name屬性,意思是index的名字,此處不懂沒關係,在後面的DataFrame中也會繼續講到。下面幾個圖分別顯示了:不指定index,指定index。


一個Series的完整結構包括:
數據內容部分Series.values
行索引部分Series.index
行索引的名字Series.index.name
結構圖和示例圖如下:


查找Series元素有兩種方法:

Series的統計屬性和數據類型:

兩個Series向量相加,按照index自動匹配,無法匹配的則輸出NaN:

DataFrame可以看成是由若干Series組合而成,這些Series共享同一index行索引,列索引則包含所有Series的列名稱,行索引和列索引均有name屬性。
標準的DataFrame結構包含:
①數據內容部分df.values,它是一個numpy的ndarray類型
②行索引df.index,列索引df. columns
③行索引的名字df.index.name,和列索引的名字df.columns.name
結構圖如下:

創建DataFrame可以將一個(有序)字典傳入函數,字典的鍵key將自動變成數據框的列索引columns,如果不顯式指定行索引index,則系統自動生成整數型行索引0 1 2 3……
創建示例:

分別查看數據框的列索引columns和行索引index:

DataFrame的統計功能自動按列計算:

DataFrame的查找元素方法也有df.iloc[行標,列標]和df.loc[行索引,列索引]兩種方式:

在DataFrame中「點選」幾列和「框選」幾列的方法:
點選:選擇不連續的幾列
框選:選擇連續的幾列

DataFrame的loc屬性在查找連續幾列時,是包含首尾列的;而iloc屬性則不包含尾列。日常使用中loc屬性更直觀、更常用。這一功能經常用來取數據框子集,舉例:

此外,DataFrame還有一個特殊的篩選屬性(條件篩選),可根據某一列滿足某一條件,或整個數據框滿足某一條件,然後生成一個布爾型索引,用於數據篩選。
例如:DataFrame的某一列與一個標量進行比較,生成一個布爾型Series索引,可將其傳入df.loc中,篩選出滿足條件的 行:

查看DataFrame的數據類型,與英語的複數相似,單個Series用dtype,多個Series就變成了複數形式dtypes。
查看DataFrame的形狀,即有多少行多少列數據,用shape屬性。

描述性統計信息默認按列統計:

3. 總結
以上內容重點講解了日後數據分析中常用的DataFrame的結構和一些基本屬性,下表給出《DataFrame常用屬性速查表》,牢記此表,將讓你節約65%的數據清洗時間,別問我數字怎麼來的,我猜的,總之將大幅提升你清理數據的效率。

《速查表》的後半部分屬性將在下篇文章--應用到實際數據分析過程時,結合相應步驟,作詳細講解,你會發現:全是套路。。。
推薦閱讀:
※Python-NumPy模塊的通用函數(3)
※Numpy基本語法示例②
※學習numpy庫
※Python數據分析簡單的基本過程
