查找带有 df.iterrows() 的行并根据条件删除一些行
Find rows with df.iterrows() and drop some based on condition
所以我有一个 DataFrame。正如您将看到的,我想遍历它。我不知道的是如何遍历每一行。如果我在遍历数据时发现某一行至少包含一个坏项列表中的一项,那么我想删除整行。
这是一个名为 only_dna
:
的 DataFrame
a_base
a_base
a_base
a_base
A
C
G
G
DUPE
0
?
NTC
第二行是我检查每行值的所有项目,看它们是否存在,如果存在,我将删除该行。但是,我还没有想出如何做到这一点。这就是我的问题:
这是我想出的一个半生不熟的想法,这显然行不通,实际上,我想知道这是否是正确的思路?
bad_data = ['?','0','DUPE','NTC']
rows = len(only_dna.axes[0])
cols = len(only_dna.axes[1])
for i, d in only_dna.iterrows():
if only_dna.iloc[i].contains(bad_data):
only_dna.drop.iloc[i]
IIUC,您可以创建一个布尔掩码并过滤掉包含错误数据的行:
mask = only_dna.apply(lambda row: any(x in bad_data for x in row), axis=1)
out = only_dna[~mask]
输出:
a_base a_base.1 a_base.2 a_base.3
0 A C G G
所以我有一个 DataFrame。正如您将看到的,我想遍历它。我不知道的是如何遍历每一行。如果我在遍历数据时发现某一行至少包含一个坏项列表中的一项,那么我想删除整行。
这是一个名为 only_dna
:
a_base | a_base | a_base | a_base |
---|---|---|---|
A | C | G | G |
DUPE | 0 | ? | NTC |
第二行是我检查每行值的所有项目,看它们是否存在,如果存在,我将删除该行。但是,我还没有想出如何做到这一点。这就是我的问题:
这是我想出的一个半生不熟的想法,这显然行不通,实际上,我想知道这是否是正确的思路?
bad_data = ['?','0','DUPE','NTC']
rows = len(only_dna.axes[0])
cols = len(only_dna.axes[1])
for i, d in only_dna.iterrows():
if only_dna.iloc[i].contains(bad_data):
only_dna.drop.iloc[i]
IIUC,您可以创建一个布尔掩码并过滤掉包含错误数据的行:
mask = only_dna.apply(lambda row: any(x in bad_data for x in row), axis=1)
out = only_dna[~mask]
输出:
a_base a_base.1 a_base.2 a_base.3
0 A C G G