在工作中我們經常會遇到刪除某些不符合條件的數據,而且有時候是刪除多條,在這里我提供一個簡單的操作辦法
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刪除函數中,我們傳進去的是一個索引列表集合。
