Pandas實現按條件刪除多行數據


在工作中我們經常會遇到刪除某些不符合條件的數據,而且有時候是刪除多條,在這里我提供一個簡單的操作辦法

Question:刪除有2個0以上的行(包含2個)


先看下完整代碼

# 模擬數據
df = pd.DataFrame({'a':[1,0,2,1,3],'b':[0,2,1,0,1],'c':[0,2,1,0,0],'d':[1,2,0,0,0]})
# 統計數據
sums = (df == 0).astype(int).sum(axis=1)
# 獲取符合條件的行索引
sums_result = list(sums[sums>1].index)
# 刪除
df = df.drop(sums_result, axis=0)

效果:

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

分析:

1、我們先讀取數據

當然這個數據可以從excel或者其他地方讀取

df = pd.DataFrame({'a':[1,0,2,1,3],'b':[0,2,1,0,1],'c':[0,2,1,0,0],'d':[1,2,0,0,0]})
df  # 打印df

在這里插入圖片描述

2、統計每一行包含0的個數

sums = (df == 0).astype(int).sum(axis=1)
sums # 打印sums

在這里插入圖片描述

從上圖我們看到每一行包含的零的個數,這個數據是一個 Series類型的數據。
0、3、4行符合我們的要求,我們需要刪除。

3、按要求找到我們要刪除的行 的 索引

注意,我們這里統計的是所有的符合條件的行,這樣一列我們可以避免使用for循環去刪除,就可以一次性去刪除符合條件的行

# 這樣是返回Series的數據,需要使用下面的轉換,我們最終是需要符合條件的集合
sums_result = sums[sums>1]
sums_result # 打印sums_result

在這里插入圖片描述

注意,這里我們需要將Series轉換成 List數據 才行,因為后面drop接口需要接收的是符合條件的縮影

sums_result = list(sums[sums>1].index)
sums_result  # 打印sums_result

在這里插入圖片描述

這里我們可以改變條件,比如刪除每行0有2個或者有1個的條件

4、執行刪除

df = df.drop(sums_result, axis=0)
df  # 打印df

在這里插入圖片描述

從上圖可以看到我們已經刪除了了符合條件的行,在這個drop刪除函數中,我們傳進去的是一個索引列表集合。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM