Pandas 刪除數(shù)據(jù)
1. 前言
上一小節(jié)我們講述了如何新增數(shù)據(jù)的方法,主要包括新增行和列的具體操作,新增操作是為了我們對(duì)數(shù)據(jù)進(jìn)行擴(kuò)充,滿足我們對(duì)數(shù)據(jù)量大和內(nèi)容豐富的追求,而有時(shí)候恰恰相反,數(shù)據(jù)里面存在大量的臟數(shù)據(jù)和無效數(shù)據(jù),我們需要對(duì)這部分?jǐn)?shù)據(jù)進(jìn)行刪除,避免這些數(shù)據(jù)在分析結(jié)果中帶來的誤差或精度不夠的影響,那在 Pandas 中該如何根據(jù)需要去刪除指定的數(shù)據(jù)集呢?
Pandas 刪除數(shù)據(jù)可以分為兩種操作,一是刪除指定的行或列,二是根據(jù)條件刪除某些特定數(shù)據(jù)的行或列。這兩者雖然在效果上都能有效的刪除我們不需要的數(shù)據(jù),但其操作的本質(zhì)是不一樣的,那我們接下來就具體看一下這兩種操作的細(xì)節(jié)內(nèi)容吧。
2. 刪除指定行或列
這里刪除指定的行或列,我們主要用到了 Pandas 提供的一個(gè)函數(shù) drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’) ,該函數(shù)提供了七個(gè)參數(shù),為我們刪除指定的行或者列提供了便捷的操作,下面我們列舉了該函數(shù)常用參數(shù)的說明:
參數(shù)名 | 說明 |
---|---|
labels | 標(biāo)簽(行標(biāo)簽或者列標(biāo)簽) |
axis | 表示刪除行(axis=0 默認(rèn))或者刪除列(axis=1) |
index | 刪除的行索引名 |
columns | 刪除的列索引名 |
inplace | 指定刪除是否要在原數(shù)據(jù)上進(jìn)行操作,默認(rèn)是 False |
2.1 刪除指定的行
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 刪除指定行 等價(jià)于drop(labels=[0,1],axis=0)
data_res=data.drop(labels=[1,3])
print(data_res)
print(data)
# --- 輸出結(jié)果 ---
# --- data_res的數(shù)據(jù)集 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# --- data的數(shù)據(jù)集 ----
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
輸出解析:我們通過 drop() 方法的 labels 設(shè)置了標(biāo)簽為 1 和 3,默認(rèn)是 axis=0 則對(duì)應(yīng)的是刪除行索引為 1 和 3 的行數(shù)據(jù),如果 axis=0 是刪除行數(shù)據(jù)而設(shè)置的 labels 對(duì)應(yīng)的不是行索引標(biāo)簽,則刪除時(shí)會(huì)報(bào)錯(cuò),這里可以看到輸出結(jié)果正是刪除了行索引為1和3的兩行數(shù)據(jù)。
這里值得注意的是:在執(zhí)行刪除操作后我們?cè)俅未蛴×嗽?data 數(shù)據(jù)集,通過輸出可以看到,data 的數(shù)據(jù)并沒有被影響到,還是完整的數(shù)據(jù)集。這里如果我們的 inplace 參數(shù)設(shè)置了 True,則對(duì)應(yīng)的刪除操作后,原數(shù)據(jù)就會(huì)被修改,通過下面的代碼可以看到操作效果:
# 刪除指定行 等價(jià)于drop(labels=[0,1],axis=0)
data_res=data.drop(labels=[1,3],axis=0,inplace=True )
print(data_res)
print(data)
# --- 輸出結(jié)果 ---
None
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
輸出解析:這里可以看到 data_res 的輸出結(jié)果為 None ,而 data 原數(shù)據(jù)集則被刪除了1和3的索引行。這是因?yàn)楫?dāng)我們?cè)O(shè)置了 inplace=True 時(shí),drop() 操作后就不會(huì)返回一個(gè)新的數(shù)據(jù)集,而是在原數(shù)據(jù)集的基礎(chǔ)上進(jìn)行了操作,在實(shí)際應(yīng)用中,如果不是特別的需要,建議不要指定該參數(shù)為 True,不然會(huì)改變?cè)袛?shù)據(jù)對(duì)其他的分析產(chǎn)生一定的影響。
2.2 刪除指定的列
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 刪除指定列
data_res=data.drop(labels=["推出時(shí)間","主要?jiǎng)?chuàng)始人"],axis=1)
print(data_res)
# --- 輸出結(jié)果 ---
編程語言 價(jià)格
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 設(shè)置刪除指定的列,列索引名要真實(shí)存在,不然會(huì)報(bào)錯(cuò),同時(shí) axis=1 是指定刪除列操作,不能省略。通過輸出結(jié)果可以看到刪除了推出時(shí)間和主要?jiǎng)?chuàng)始人這兩列的數(shù)據(jù)。
2.3 刪除指定的行和列
有時(shí)候我們需要將某行和某列同時(shí)刪除,這時(shí)候我們可以同時(shí)傳入 index 和 columns 的參數(shù)值即可,如果只傳一個(gè),則是只刪除對(duì)應(yīng)的行或者列:
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 同時(shí)刪除指定行和列
data_res=data.drop(index=4, columns="主要?jiǎng)?chuàng)始人")
print(data_res)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格
0 java 1995年 45.6
1 python 1991年 67.0
2 C 1972年 33.9
3 js 1995年 59.5
5 C++ 1983年 75.0
輸出解析:這里我們同時(shí)指定了行索引和列索引的值,通過輸出結(jié)果可以看出,這里刪除了行索引為4的數(shù)據(jù)并且刪除了主要?jiǎng)?chuàng)始人這一列的數(shù)據(jù)。
3. 刪除特定數(shù)據(jù)的行
這里我們講的刪除特定數(shù)據(jù)的行或列,其實(shí)并不是真正意義上的刪除內(nèi)容,而是通過數(shù)據(jù)條件的篩選過濾,得到一個(gè)新的數(shù)據(jù)集,從效果上看,也是去除了部分?jǐn)?shù)據(jù)內(nèi)容,達(dá)到了我們刪除數(shù)據(jù)的實(shí)際需要。
# 導(dǎo)入pandas包
import pandas as pd
# 指定導(dǎo)入的文件地址
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第7,8,9,10小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
# 我們對(duì)價(jià)格列小于50的數(shù)據(jù)進(jìn)行篩選
data_res=data[data["價(jià)格"]<50]
print(data_res)
# --- 輸出結(jié)果 ---
編程語言 推出時(shí)間 價(jià)格 主要?jiǎng)?chuàng)始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
輸出解析:這里我們通過對(duì)價(jià)格列費(fèi)用小于50的數(shù)據(jù)進(jìn)行篩選,進(jìn)而刪除掉了價(jià)格大于等于50的數(shù)據(jù)行,返回給了新的數(shù)據(jù)集 data_res ,在效果上達(dá)到了刪除數(shù)據(jù)行的作用。
3.小結(jié)
本節(jié)課我們主要學(xué)習(xí)了刪除數(shù)據(jù)行或者列的操作方法,一種是通過 drop() 方法刪除指定的行或列,二是通過數(shù)據(jù)的篩選過濾進(jìn)而達(dá)到刪除數(shù)據(jù)行的效果,兩種刪除方法要根據(jù)具體的業(yè)務(wù)需要進(jìn)行選用。本節(jié)課程的重點(diǎn)如下:
- drop() 操作刪除數(shù)據(jù)行和列的操作方法;
- drop() 操作中幾個(gè)重要參數(shù)的使用;
- 根據(jù)特定條件刪除數(shù)據(jù)行的操作。
Tips:想要學(xué)習(xí)更多Pandas相關(guān)知識(shí),可以點(diǎn)擊
Pandas 新增數(shù)據(jù)
Pandas 修改數(shù)據(jù)
Pandas 查詢數(shù)據(jù)