簡體   English   中英

迭代到Pandas Dataframe列時如何刪除行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM