Pandas 重復值的處理
1. 前言
上一小節我們學習了 Pandas 庫中對于缺失值 NaN 的檢測、過濾和填充操作,對于數據完整性的提升有著十分重要的意義,除了缺失數據的存在,源數據經常還會存在重復性數據,尤其是在數據量越大的情況下,重復的概率也越大,數據中存在重復值,是常見的現象,這些數據只是根據我們的分析需要不同,而產生的價值不同,有時我們希望排除這些數據進行分析,而有時我們又需要對這部分數據進行單獨的分析,那對于重復數據的不同分析需要,Pandas 庫又提供了怎樣的操作呢?
本小節我們將學習 Pandas 庫對于重復數據的查找操作和重復數據的刪除操作,為數據的進一步分析打下基礎。
2. 重復值的查找
在講解程序操作之前,我們先處理一下數據源,修改一部分重復數據出來,為下面的操作做準備:
2.1 duplicated () 函數
該函數用于檢測數據的重復值,返回值是一個布爾序列,如果某個值存在重復,則返回的為 True。該函數有兩個參數,一個是參數 subset ,用于指定檢測的某個列,另一個是 keep 指定如何控制如何檢測重復值,有三個值可選擇:
- first:表示將第一次出現重復的值視為唯一的,后面重復的值標記為 True ,默認是這種方式;
- last:表示將最后一次出現重復的值視為唯一的,前面的重復值標記為 True ;
- False:表示將所有的重復項都標記為 True ;
下面我們通過實際代碼操作來演示重復數據的檢測操作:
# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第12小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1983年 45.6 James Gosling
1 python 1991年 67.0 Bjarne Stroustrup
2 python 1972年 45.6 Dennis MacAlistair Ritchie
3 js 1983年 45.6 js
4 James Gosling 2012年 45.6 Rasmus Lerdorf
5 C++ java 75.0 Bjarne Stroustrup
# duplicated() 重復數據的判斷
new_data= data.duplicated()
print(new_data)
# --- 輸出結果 ---
0 False
1 False
2 False
3 False
4 False
5 False
dtype: bool
# 結果解析:這里的 duplicated() 函數我們什么參數也沒設置,所有默認會以正行值作為判斷,也就是判斷是否有重復行的數據內容。
# duplicated() 設置 subset
new_data= data.duplicated(subset="價格")
print(new_data)
# --- 輸出結果 ---
0 False
1 False
2 True
3 True
4 True
5 False
dtype: bool
# 結果解析:這里程序設置 subset="價格",則只對標簽為"價格"的列進行重復數據的檢測,可以看到結果中重復數據值除了第一個重復值被視為唯一的,后面出現的重復值檢測結果均被設置為了 True,因為 keep 參數如果不設置,默認是 first 方式檢測。
# duplicated() 設置 keep 為 last
new_data= data.duplicated(subset="價格",keep="last")
print(new_data)
# --- 輸出結果 ---
0 True
1 False
2 True
3 True
4 False
5 False
dtype: bool
# 結果解析:這里指定 keep="last" ,表示最后一次出現的重復值視為唯一的,之前出現的重復值被檢查為重復,結果為 True 。
# duplicated() 設置 keep 為 False
new_data= data.duplicated(subset="價格",keep=False)
print(new_data)
# --- 輸出結果 ---
0 True
1 False
2 True
3 True
4 True
5 False
dtype: bool
# 結果解析:這里通過設置 keep=False ,將檢測出的所有重復值均表示為 True 。
3. 重復值的刪除
3.1 drop_duplicates () 函數
該函數用于刪除特定列下的重復數據行,并返回一個新的數據集對象,其中有兩個重要的參數,一是 subset ,該參數用來指定判定重復的數據的列,默認是所有的列;二是 keep 參數,該參數是用來控制如何刪除重復值的,有三個參數值選項:
- first:表示將第一次出現的重復值視為唯一的,刪除后面出現重復值的數據行 ,默認是這種方式;
- last:表示將最后一次出現重復的值視為唯一的,刪除前面出現重復值的數據行 ;
- False:表示將刪除重復值所在的所有數據行 ;
下面我們通過實際代碼操作來演示重復數據的刪除操作:
# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第12小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1983年 45.6 James Gosling
1 python 1991年 67.0 Bjarne Stroustrup
2 python 1972年 45.6 Dennis MacAlistair Ritchie
3 js 1983年 45.6 js
4 James Gosling 2012年 45.6 Rasmus Lerdorf
5 C++ java 75.0 Bjarne Stroustrup
# drop_duplicates()
data_res=data.drop_duplicates()
print(data_res)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1983年 45.6 James Gosling
1 python 1991年 67.0 Bjarne Stroustrup
2 python 1972年 45.6 Dennis MacAlistair Ritchie
3 js 1983年 45.6 js
4 James Gosling 2012年 45.6 Rasmus Lerdorf
5 C++ java 75.0 Bjarne Stroustrup
# 結果解析:這里我們直接使用了 drop_duplicates() 函數,但是沒有傳入任何的參數,默認則是以整行進行判斷是否存在重復行,要是存在則進行刪除操作。這里因為沒有重復行,因此返回的數據集和原數據集內容一樣。
# 設置 subset="編程語言"
data_res=data.drop_duplicates(subset="編程語言")
print(data_res)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1983年 45.6 James Gosling
1 python 1991年 67.0 Bjarne Stroustrup
3 js 1983年 45.6 js
4 James Gosling 2012年 45.6 Rasmus Lerdorf
5 C++ java 75.0 Bjarne Stroustrup
# 結果解析:這里設置了 subset="編程語言" ,以編程語言列為標準查找重復值,默認 keep="first" 表示第一次的重復值視為唯一的不進行刪除,通過輸出結果可以看到,第3行的數據被刪除了。
# 設置 keep="last"
data_res=data.drop_duplicates(subset="編程語言",keep="last")
print(data_res)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1983年 45.6 James Gosling
2 python 1972年 45.6 Dennis MacAlistair Ritchie
3 js 1983年 45.6 js
4 James Gosling 2012年 45.6 Rasmus Lerdorf
5 C++ java 75.0 Bjarne Stroustrup
# 結果解析:這里設置了 keep="last" 表示將最后一個出現的重復值視為唯一的,因此這里刪除了第2行的數據。
# 設置 keep=False
data_res=data.drop_duplicates(subset="編程語言",keep=False)
print(data_res)
# --- 輸出結果 ---
編程語言 推出時間 價格 主要創始人
0 java 1983年 45.6 James Gosling
3 js 1983年 45.6 js
4 James Gosling 2012年 45.6 Rasmus Lerdorf
5 C++ java 75.0 Bjarne Stroustrup
# 結果解析:通過設置 keep=False 可以看到所有重復值所在的行都被刪除了。
3. 小結
本節課程我們主要學習了 Pandas 庫對于重復數據的處理,包括查詢重復數據值,以及對出現重復的數據進行刪除操作,根據我們實際的應用需要,我們可以方便的去處理重復數據,從而進一步的對數據開展分析工作。本節課程的重點如下:
- 使用 duplicated () 函數去檢測重復數據值的操作以及其中參數的設置;
- 使用 drop_duplicates () 函數去刪除重復的數據值。