我的Python數據分析筆記二之Pandas


【注】:此篇內容爲作者整理補充,書籍中可能順序有些差別。


(聲明:本教程僅供本人學習使用,如有人使用該技術觸犯法律與本人無關)
(如果有錯誤,還希望指出。共同進步)



Pandas層次化索引

創建多層行索引


1、隱式構造

Series:(二層索引)
在這裏插入圖片描述
DataFrame:
在這裏插入圖片描述
(三層索引):
在這裏插入圖片描述


2、顯示構造pd.MultiIndex

1、使用數組:pd.MultiIndex.from_arrays()
在這裏插入圖片描述
2、使用tuple:pd.MultiIndex.from_tuples()
在這裏插入圖片描述
3、使用product:pd.MultiIndex.from_product()
在這裏插入圖片描述


多層列索引

除了行索引Index,列索引columns也能用同樣的方法創建多層索引
【注】:numpy.random.randint(0,100,size=8)表示8行一列;size=(1,8)表示一行8列
在這裏插入圖片描述


多層索引對象的索引與切片操作

1、Series的操作

【重要】對於Series來說,直接中括號[]與使用.loc()完全一樣,因此,推薦使用中括號索引和切片。

2、DataFrame的操作

(1) 可以直接使用列名稱來進行列索引
(2) 使用行索引需要用ix(),loc()等函數
【極其重要】推薦使用loc()函數
注意在對行索引的時候,若一級行索引還有多個,對二級行索引會遇到問題!也就是說,無法直接對二級索引進行索引,必須讓二級索引變成一級索引後才能對其進行索引!只能行切片


索引的堆(stack)

stack():列索引放到行索引上面
unstack():行索引放到列索引上面


【小技巧】

使用stack()的時候,level等於哪一個,哪一個就消失,出現在行裏。
使用unstack()的時候,level等於哪一個,哪一個就消失,出現在列裏。

where(條件):對數據的過濾,other用來指定不滿足條件的參數

Pandas數據處理


1、刪除重複元素

使用**duplicated()函數檢測重複的行,返回元素爲布爾類型的Series對象,每個元素對應一行,如果該行不是第一次出現,則元素爲True
使用
drop_duplicates()**函數刪除重複的行

2. 映射

映射的含義:創建一個映射關係列表,把values元素和一個特定的標籤或者字符串綁定
需要使用字典:

map = { 'label1':'value1', 'label2':'value2', ... }

replace()函數:替換元素

在這裏插入圖片描述


map()函數:

【*】:(常用)新建一列(由已有的列生成一個新列,或者修改當前列)
map函數的參數:


1.字典

在這裏插入圖片描述

2.lambda函數

# 新建一列
df["c"] = df["GO"].map(lambda x : x-5)
# 修改當前“GO”列
df["GO"] = df["GO"].map(lambda x : x-5)

3.回調函數

在這裏插入圖片描述


rename()函數:替換索引

仍然是新建一個字典
使用rename()函數替換行索引
在這裏插入圖片描述

3. 異常值檢測和過濾

使用describe()函數查看每一列的描述性統計量
在這裏插入圖片描述

	中位數:奇數個是最中間的數,偶數個是中間兩個數的平均值
	std():可以求得DataFrame對象每一列的標準差
	df.drop(labels,inplace = True):刪除特定索引

4. 排序

【排序】
1、使用**.take()函數排序
2、可以藉助
np.random.permutation()**函數隨機排序

	# nums 指dataframe數據的行數
	df.take(np.random.permutation(nums))

【隨機抽樣】
當DataFrame規模足夠大時,直接使用**np.random.randint()函數,就配合take()**函數實現隨機抽樣

	# left 指隨機數據行數開始行
	# right 指隨機數據行數結束行
	# nums 指隨機抽樣數據的個數
	df.take(np.random.randint(left, right, size=nums))

5. 數據聚合【重點】

數據聚合是數據處理的最後一步,通常是要使每一個數組生成一個單一的數值。
在這裏插入圖片描述

數據分類處理:

核心: groupby()函數

分組:先把數據分爲幾組——groupby()之後的數據是一個對象;一般後面跟上聚合操作

用函數處理:爲不同組的數據應用不同的函數以轉換數據

合併:把不同組得到的結果合併起來


Pandas的拼接操作

pandas的拼接分爲兩種:
級聯:pd.concat, pd.append
合併:pd.merge, pd.join

pd.concat()級聯

在這裏插入圖片描述在這裏插入圖片描述

1、簡單級聯

和np.concatenate一樣,優先增加行數(默認axis=0),可以通過設置axis來改變級聯方向;【注意】index在級聯時可以重複
也可以選擇忽略ignore_index,重新索引
在這裏插入圖片描述
或者使用多層索引 keys
concat([x,y],keys=[‘x’,‘y’])
在這裏插入圖片描述

2、不匹配級聯

不匹配指的是級聯的維度的索引不一致。例如縱向級聯時列索引不一致,橫向級聯時行索引不一致;有3種連接方式:
–外連接:補NaN(默認模式),join=“outer”;默認
在這裏插入圖片描述
–內連接:只連接匹配的項,匹配不到的不要
在這裏插入圖片描述
–連接指定軸 join_axes
在這裏插入圖片描述

3、使用append()函數添加

由於在後面級聯的使用非常普遍,因此有一個函數append專門用於在後面添加


pd.merge()合併

merge與concat的區別在於,merge需要依據某一共同的行或列來進行合併
使用pd.merge()合併時,會自動根據兩者相同column名稱的那一列,作爲key來進行合併。

注意每一列元素的順序不要求一致

1)一對一合併(重複的保留一次)
2)多對一合併(數據總數爲:多乘一+不重複的)
3)多對多合併(數據總數:多乘多+不重複的)
4) key的規範化:

使用on=顯式指定哪一列爲key,當有多個key相同時使用,但是用法很少

在這裏插入圖片描述
suffixes用來指定合併後的列名
在這裏插入圖片描述

當有不同的列名時(數據元素類型一樣),使用left_on和right_on指定左右兩邊的列作爲key,當左右兩邊的key都不想等時使用

在這裏插入圖片描述

left_index開啓左邊表的行索引,right_index開啓右邊表的行索引,類似級聯

在這裏插入圖片描述

內合併與外合併,how=“inner/outer/left/right”

在這裏插入圖片描述

內合併:只保留兩者都有的數據(默認模式)
外合併:數據沒有的補上Nan
左合併:左邊表的數據一個都不能少,即使不上Nan也不能把數據丟掉
右合併:右邊表的數據一個都不能少,即使不上Nan也不能把數據丟掉

列衝突的解決

當列衝突時,即有多個列名稱相同時,需要使用on=來指定哪一個列作爲key,配合suffixes指定衝突列名
可以使用suffixes=自己指定後綴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章