[英]How to delete row when iterating into pandas Dataframe column?
這是我的csv文件:
A B C D J
0 1 0 0 0
0 0 0 0 0
1 1 1 0 0
0 0 0 0 0
0 0 7 0 7
我每次都需要選擇兩列,如果有兩個0,我會驗證此條件。刪除行,例如,我選擇A和B
Input
A B
0 1
0 0
1 1
0 0
0 0
Output
A B
0 1
1 1
然后我選擇A和C ..
我將此代碼用於A和B,但返回錯誤
import pandas as pd
df = pd.read_csv('Book1.csv')
a=df['A']
b=df['B']
indexes_to_drop = []
for i in df.index:
if df[(a==0) & (b==0)] :
indexes_to_drop.append(i)
df.drop(df.index[indexes_to_drop], inplace=True )
請幫忙!
不要迭代。 創建一個布爾系列來切片您的DataFrame:
cols = ['A', 'B']
m = df[cols].ne(0).any(1)
df.loc[m]
A B C D J
0 0 1 0 0 0
2 1 1 1 0 0
您可以獲取所有組合,然后使用itertools.combinations
將它們存儲在dict
。 使用.loc
選擇要關注的行和列。
from itertools import combinations
d = {c: df.loc[df[list(c)].ne(0).any(1), list(c)]
for c in list(combinations(df.columns, 2))}
d[('A', 'B')]
# A B
#0 0 1
#2 1 1
d[('C', 'J')]
# C J
#2 1 0
#4 7 7
首先,我們將所需的列A與其余所有列進行組合,然后使用iloc
為每個列組合選擇正確的行:
idx_ranges = [[0,i] for i in range(1, len(df.columns))]
dfs = [df[df.iloc[:, idx].ne(0).any(axis=1)].iloc[:, idx] for idx in idx_ranges]
print(dfs[0], '\n')
print(dfs[1], '\n')
print(dfs[2], '\n')
print(dfs[3])
A B
0 0 1
2 1 1
A C
2 1 1
4 0 7
A D
2 1 0
A J
2 1 0
4 0 7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.