Python-如果行包含矩阵/数组,则删除行

时间:2018-12-10 14:38:44

标签: python arrays matrix

如果您有x * n矩阵,如何检查包含一定数字的行,如果是,如何删除该行?

1 个答案:

答案 0 :(得分:2)

如果您使用的是pandas,则可以创建一个可用于为数据帧建立索引的掩码,并用~将该掩码取反:

df = pd.DataFrame(np.arange(12).reshape(3, 4))
#    0  1   2   3
# 0  0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11

value = 2

如果要检查特定列中是否包含该值:

df[~(df[2] == value)]
#    0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11

或者它是否可以包含在任何列中:

df[~(df == value).any(axis=1)]
#    0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11

之后只需将其重新分配给df


如果您仅使用numpy,这也可以使用:

x = np.arange(12).reshape(3, 4)
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

x[~(x == value).any(axis=1)]
# array([[ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

最后,如果您使用的是普通Python并且有列表列表,请在列表理解中使用内置的any

y = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

[row for row in y if not any(x == value for x in row)]
# [[4, 5, 6, 7], [8, 9, 10, 11]]