大熊猫如果任何特定的列包含特定的值,如何删除整行?

时间:2020-07-01 09:12:00

标签: python pandas

我有一个像这样的dataFrame: enter image description here

我想知道如果任何特定列包含特定值怎么删除整行?

例如,如果列Q1,Q2或Q3包含零,则删除整行。但是,如果列Q4或Q5包含零,请不要删除该行。

enter image description here

2 个答案:

答案 0 :(得分:1)

使用loc沿轴1过滤eqany,并使用逻辑非运算符~

df.loc[~df[['Q1', 'Q2', 'Q3']].eq(0).any(1)]

示例

import pandas as pd
import numpy as np

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,5), columns=['Q1', 'Q2', 'Q3', 'Q4', 'Q5'])

df.loc[1,'Q1'] = 0
df.loc[4, 'Q2'] = 0
df.loc[3, 'Q5'] = 0

[出]

         Q1        Q2        Q3        Q4        Q5
0  1.764052  0.400157  0.978738  2.240893  1.867558
1  0.000000  0.950088 -0.151357 -0.103219  0.410599
2  0.144044  1.454274  0.761038  0.121675  0.443863
3  0.333674  1.494079 -0.205158  0.313068  0.000000
4 -2.552990  0.000000  0.864436 -0.742165  2.269755

# Should drop rows 1 and 4, but leave row 3

df.loc[~df[['Q1', 'Q2', 'Q3']].eq(0).any(1)]

[出]

         Q1        Q2        Q3        Q4        Q5
0  1.764052  0.400157  0.978738  2.240893  1.867558
2  0.144044  1.454274  0.761038  0.121675  0.443863
3  0.333674  1.494079 -0.205158  0.313068  0.000000

答案 1 :(得分:0)

我们可以将其视为条件过滤问题。我们只想保留第Q1,Q2和Q3列不为零的行:

df_new = df[(df["Q1"] != 0) & (df["Q2"] != 0) & (df["Q3"] != 0)]

df_new现在仅包含所需的行。