亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Pandas 刪除數據

1. 前言

上一小節我們講述了如何新增數據的方法,主要包括新增行和列的具體操作,新增操作是為了我們對數據進行擴充,滿足我們對數據量大和內容豐富的追求,而有時候恰恰相反,數據里面存在大量的臟數據和無效數據,我們需要對這部分數據進行刪除,避免這些數據在分析結果中帶來的誤差或精度不夠的影響,那在 Pandas 中該如何根據需要去刪除指定的數據集呢?

Pandas 刪除數據可以分為兩種操作,一是刪除指定的行或列,二是根據條件刪除某些特定數據的行或列。這兩者雖然在效果上都能有效的刪除我們不需要的數據,但其操作的本質是不一樣的,那我們接下來就具體看一下這兩種操作的細節內容吧。

2. 刪除指定行或列

這里刪除指定的行或列,我們主要用到了 Pandas 提供的一個函數 drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’) ,該函數提供了七個參數,為我們刪除指定的行或者列提供了便捷的操作,下面我們列舉了該函數常用參數的說明:

參數名 說明
labels 標簽(行標簽或者列標簽)
axis 表示刪除行(axis=0 默認)或者刪除列(axis=1)
index 刪除的行索引名
columns 刪除的列索引名
inplace 指定刪除是否要在原數據上進行操作,默認是 False

2.1 刪除指定的行

# 導入pandas包
import pandas as pd
# 指定導入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)

# --- 輸出結果 ---
  編程語言   推出時間    價格                       主要創始人
0    java  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.0           Bjarne Stroustrup

# 刪除指定行 等價于drop(labels=[0,1],axis=0)
data_res=data.drop(labels=[1,3])
print(data_res)
print(data)

# --- 輸出結果 ---
# --- data_res的數據集 ---
    編程語言   推出時間    價格                       主要創始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie
4   php  201269.9              Rasmus Lerdorf
5   C++  198375.0           Bjarne Stroustrup
# --- data的數據集 ----
     編程語言   推出時間    價格                       主要創始人
0    java  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.0           Bjarne Stroustrup

輸出解析:我們通過 drop() 方法的 labels 設置了標簽為 1 和 3,默認是 axis=0 則對應的是刪除行索引為 1 和 3 的行數據,如果 axis=0 是刪除行數據而設置的 labels 對應的不是行索引標簽,則刪除時會報錯,這里可以看到輸出結果正是刪除了行索引為1和3的兩行數據。

這里值得注意的是:在執行刪除操作后我們再次打印了原 data 數據集,通過輸出可以看到,data 的數據并沒有被影響到,還是完整的數據集。這里如果我們的 inplace 參數設置了 True,則對應的刪除操作后,原數據就會被修改,通過下面的代碼可以看到操作效果:

# 刪除指定行 等價于drop(labels=[0,1],axis=0)
data_res=data.drop(labels=[1,3],axis=0,inplace=True )
print(data_res)
print(data)

# --- 輸出結果 ---
None

   編程語言   推出時間    價格                       主要創始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie
4   php  201269.9              Rasmus Lerdorf
5   C++  198375.0           Bjarne Stroustrup

輸出解析:這里可以看到 data_res 的輸出結果為 None ,而 data 原數據集則被刪除了1和3的索引行。這是因為當我們設置了 inplace=True 時,drop() 操作后就不會返回一個新的數據集,而是在原數據集的基礎上進行了操作,在實際應用中,如果不是特別的需要,建議不要指定該參數為 True,不然會改變原有數據對其他的分析產生一定的影響。

2.2 刪除指定的列

# 導入pandas包
import pandas as pd
# 指定導入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)

# --- 輸出結果 ---
  編程語言   推出時間    價格                       主要創始人
0    java  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.0           Bjarne Stroustrup

# 刪除指定列
data_res=data.drop(labels=["推出時間","主要創始人"],axis=1)
print(data_res)

# --- 輸出結果 ---
     編程語言    價格
0    java  45.6
1  python  67.0
2       C  33.9
3      js  59.5
4     php  69.9
5     C++  75.0

輸出解析:通過 labels 設置刪除指定的列,列索引名要真實存在,不然會報錯,同時 axis=1 是指定刪除列操作,不能省略。通過輸出結果可以看到刪除了推出時間和主要創始人這兩列的數據。

2.3 刪除指定的行和列

有時候我們需要將某行和某列同時刪除,這時候我們可以同時傳入 index 和 columns 的參數值即可,如果只傳一個,則是只刪除對應的行或者列:

# 導入pandas包
import pandas as pd
# 指定導入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)

# --- 輸出結果 ---
     編程語言   推出時間    價格                       主要創始人
0    java  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.0           Bjarne Stroustrup

# 同時刪除指定行和列
data_res=data.drop(index=4, columns="主要創始人")
print(data_res)

# --- 輸出結果 ---
  編程語言   推出時間    價格
0    java  199545.6
1  python  199167.0
2       C  197233.9
3      js  199559.5
5     C++  198375.0

輸出解析:這里我們同時指定了行索引和列索引的值,通過輸出結果可以看出,這里刪除了行索引為4的數據并且刪除了主要創始人這一列的數據。

3. 刪除特定數據的行

這里我們講的刪除特定數據的行或列,其實并不是真正意義上的刪除內容,而是通過數據條件的篩選過濾,得到一個新的數據集,從效果上看,也是去除了部分數據內容,達到了我們刪除數據的實際需要。

# 導入pandas包
import pandas as pd
# 指定導入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節/execl數據demo.xlsx"
# 解析數據
data = pd.read_excel(data_path)
print(data)

# --- 輸出結果 ---
  編程語言   推出時間    價格                       主要創始人
0    java  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.0           Bjarne Stroustrup

# 我們對價格列小于50的數據進行篩選
data_res=data[data["價格"]<50]
print(data_res)

# --- 輸出結果 ---
 編程語言   推出時間    價格            主要創始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie

輸出解析:這里我們通過對價格列費用小于50的數據進行篩選,進而刪除掉了價格大于等于50的數據行,返回給了新的數據集 data_res ,在效果上達到了刪除數據行的作用。

3.小結

本節課我們主要學習了刪除數據行或者列的操作方法,一種是通過 drop() 方法刪除指定的行或列,二是通過數據的篩選過濾進而達到刪除數據行的效果,兩種刪除方法要根據具體的業務需要進行選用。本節課程的重點如下:

  • drop() 操作刪除數據行和列的操作方法;
  • drop() 操作中幾個重要參數的使用;
  • 根據特定條件刪除數據行的操作。

圖片描述

Tips:想要學習更多Pandas相關知識,可以點擊
Pandas 新增數據
Pandas 修改數據
Pandas 查詢數據