我有一个 python 中的 pandas 数据框。我想在三种情况下删除该行。首先,该行中的第 1 至 6 列和第 10 至 15 列为“NA”。其次,第 1 至 3 列、第 7 至 12 列和第 16 至 18 列为“NA”。第三,第 4 至 9 栏和第 13 至 18 栏为“NA”。我编写了代码来修复它,但它不起作用。 代码如下:
data = pd.read_csv('data(2).txt',sep = "\t",index_col = 'tracking_id')
num = len(data) + 1
for i in range(num):
if (data.iloc[i,[0:5,9:14]] == 'NA') | (data.iloc[i,[0:11,15:17]] == 'NA)'\
| (data.iloc[i,[3:8,12:17]] == 'NA'):
data = data.drop(data.index[i], axis = 0)
最佳答案
您可以使用:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,18)))
df.iloc[0, np.r_[0:5,9:14]] = np.nan
df.iloc[2, np.r_[0:11,15:17]] = np.nan
df.iloc[3:5, np.r_[3:8,12:17]] = np.nan
print (df)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \
0 NaN NaN NaN NaN NaN 0.0 4.0 2.0 5.0 NaN NaN NaN NaN NaN 8.0
1 6.0 2.0 4.0 1.0 5.0 3.0 4.0 4.0 3.0 7.0 1.0 1.0 7.0 7.0 0.0
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2.0 5.0 1.0 8.0
3 2.0 8.0 3.0 NaN NaN NaN NaN NaN 3.0 4.0 7.0 6.0 NaN NaN NaN
4 7.0 6.0 6.0 NaN NaN NaN NaN NaN 6.0 6.0 0.0 7.0 NaN NaN NaN
15 16 17
0 4.0 0.0 9
1 2.0 9.0 9
2 NaN NaN 4
3 NaN NaN 5
4 NaN NaN 4
首先检查 isnull
值是否为 NaN
,然后选择numpy.r_
和 iloc
并与 all
进行比较用于检查每行的所有 value 是否都为 True
。然后使用 |
(或)构建主掩码。
最后一次过滤:boolean indexing
条件相反 ~
:
mask = df.isnull()
m1 = mask.iloc[:, np.r_[0:5,9:14]].all(1)
m2 = mask.iloc[:, np.r_[0:11,15:17]].all(1)
m3 = mask.iloc[:, np.r_[3:8,12:17]].all(1)
m = m1 | m2 | m3
print (m)
0 True
1 False
2 True
3 True
4 True
dtype: bool
df = df[~m]
print (df)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \
1 6.0 2.0 4.0 1.0 5.0 3.0 4.0 4.0 3.0 7.0 1.0 1.0 7.0 7.0 0.0
15 16 17
1 2.0 9.0 9
关于python - 如何以简单的方式删除 pandas 数据框中的特殊行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43610554/