1. 程式人生 > 其它 >Excel & Python | 菜品挑選——資料選擇 | 04

Excel & Python | 菜品挑選——資料選擇 | 04

目錄
之前是把所有的菜品都洗好並放在不同的容器裡。現在要進行切配了,需要把這些菜品挑選出來,比如做一盤涼拌黃瓜,需要先把黃瓜找出來;要做一盤可樂雞翅,需要先把雞翅找出來。資料分析也是同樣的道理,你要分析什麼,首先要把對應的資料篩選出來。

常規的資料選擇主要有列選擇、行選擇、行列同時選擇三種方式。

列選擇

選擇某一列/某幾列

在Excel中選擇某一列直接用滑鼠選中這一列即可;如果要同時選擇多列,且待選擇的列不是相鄰的,這個時候就可以先選中其中一列,然後按住Ctrl鍵不放,再選擇其他列。舉個例子,同時選擇客戶姓名和成交時間這兩列,如下圖所示。

在Python中我們要想獲取某列只需要在表df後面的方括號中指明要選擇的列名即可。如果是一列,則只需要傳入一個列名;如果是同時選擇多列,則傳入多個列名即可,多個列名用一個list存起來。

在Python中,我們把這種通過傳入列名選擇資料的方式成為普通索引

除了傳入具體的列名,我們還可以傳入具體列的位置,即第幾列,對資料進行選取,通過傳入位置來獲取資料時需要用到iloc()方法。

在上面的程式碼中,iloc 後的方括號中逗號之前的部分表示要獲取的行的位置,只輸入一個冒號,不輸入任何數值表示獲取所有的行;逗號之後的方括號表示要獲取的列的位置,列的位置同樣是也是從0開始計數。

我們把這種通過傳入具體位置來選擇資料的方式稱為位置索引

選擇連續的某幾列

在Excel中,要選擇連續的幾列時,直接用滑鼠選中這幾列即可操作。當然了,你也可以先選擇一列,然後按住 Ctrl 鍵再去選擇其他列,由於要選取的列是連續的,因此沒必要這麼麻煩。

在Python中可以通過前面介紹的普通索引和位置索引獲取某一列或多列的資料。當你要獲取的是連續的某幾列,用普通索引和位置索引也是可以做到的,但是因為你要獲取的列是連續的,所以只要傳入這些連續列的位置區間即可,同樣需要用到 iloc方法。

在上面的程式碼中,iloc 後的方括號中逗號之前的表示選擇的行,當只傳入一個冒號時,表示選擇所有行;逗號後面表示要選擇列的位置區間,0:3表示選擇第1列到第4列之間的值(包含第1列但不包含第4列),我們把這種通過傳入一個位置區間來獲取資料的方式稱為切片索引。

行選擇

在Excel中選擇行與選擇列的方式是一樣的,先選擇一行,按住Ctrl鍵再選擇其他行。

在Python中,獲取行的方式主要有兩種,一種是普通索引,即傳入具體行索引的名稱,需要用到loc方法;另一種是位置索引,即傳入具體的行數,需要用到iloc方法。

為了讓大家看得更清楚,我們對行索引進行自定義。

選擇滿足條件的行

前兩節獲取某一列時,獲取的時這一列的所有行,我們還可以只篩選出這一列中滿足條件的值。

比如年齡這一列,需要把非異常值(大於200屬於異常值),即小於200歲的年齡篩選出來,該怎麼實現呢?

在Excel中我們直接使用篩選功能,將滿足條件的值篩選出來,篩選方法如下圖所示。

篩選年齡小於200的資料前後的對比如下圖所示。

在Python中,我們直接在表名後面指明哪列要滿足什麼條件,就可以把滿足條件的資料篩選出來。

我們把上面這種通過傳入一個判斷條件來選擇資料的方式稱為布林

索引。

傳入的條件還可以是多個,如下為選擇的年齡小於200且唯一識別碼小於102的資料。

與 &

或 |

行列同時選擇

上面的資料選擇都是針對單一的行或列進行選擇,實際業務中我們也會用到行、列同時選擇,所謂的行、列同時選擇就是選擇出行和列的相交部分。

例如,我們要選擇第二、三行和第二、三列相交部分的資料,下圖中的陰影部分就是最終的選擇結果。

行列同時選擇在Excel中主要是通過滑鼠拖曳實現的,與前面的單一行/列選擇方法一致,此處不再贅述,接下來主要講講在Python中如何實現。

普通索引+普通索引選擇指定的行和列

普通索引+普通索引就是通過同時傳入行和列的索引名稱進行資料選擇,需要用到loc方法。

loc方法中的第一對方括號表示行索引的選擇,傳入行索引名稱;loc方法中的第二對方括號表示列索引的選擇,傳入列索引名稱。

位置索引+位置索引選擇指定行和列

位置索引+位置索引是通過同時傳入行、列索引的位置來獲取資料,需要用到iloc方法。

在iloc方法中的第一對方括號表示行索引的選擇,傳入要選擇行索引的位置;第二對方括號表示列索引的選擇,傳入要選擇列索引的位置。行和列索引的位置都是從0開始計數。

布林索引+普通索引選擇指定行和列

布林索引+普通索引是先對錶進行布林索引選擇行,然後通過普通索引選擇列。

上面的程式碼表示選擇年齡小於200的訂單編號和年齡,先通過布林索引選擇出年齡小於200的所有行,然後通過普通索引選擇訂單編號和年齡這兩列。

切片索引+切片索引選擇指定行和列

切片索引+切片索引是通過同時傳入行、列索引的位置區間進行資料選擇。

切片索引+普通索引選擇指定行和列

前面我們說過,如果是普通索引,就直接傳入行或列名,用loc方法即可;如果是切片索引,也就是傳入行或列的位置區間,要用 iloc 方法。如果是切片索引+普通索引,也就是行(列)用切片索引,列(行)用普通索引,這種交叉索引要用ix方法。

小結

列選擇
	選擇某一列/某幾列
		普通索引 df[["列1","列2",...]]
		位置索引 df[:,[0,2]] # 所有行 第1列和第3列
	選擇連續的某幾列
		位置索引 df[:,[0:3]] # 連續取第1~4列
行選擇
	iloc 和 loc 如果只有一個值就是選擇行
	loc 通過名稱 df[["一","二",""三]] df["一":"三"]
	iloc 通過下標 df[[0,1,2]] df[0:3]
	ix 是結合了 loc和iloc
	選擇符合條件的行 布林索引
		df[df["年齡"]<200]
		df[(df["年齡"]<200) & (df["年齡"]>0)] 注意要加()
		與 & 或 | 

同時選擇行和列
	布林索引選擇行 + 列選擇
	df[布林索引][普通索引、位置索引、標籤索引]
	df[(df["年齡"]<200) & (df["年齡"]>0)][["訂單編號","成交時間"]]