pandas如何使用iloc删除所有包含所有false的行

时间:2020-07-27 18:03:01

标签: python pandas

我有一个数据框,我想在其中删除所有全零的所有行。

df = pd.DataFrame(data={
    'a': [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0],
    'b': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    'c': [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0],
    'd': [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
    'e': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    'f': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
})

使用.ix,我会df.ix[(df>0).any(1)]

    a   b   c   d   e   f
1   0   0   0   0   0   1
5   0   0   5   0   0   0
6   1   0   0   0   0   0
8   0   0   0   1   0   0
9   1   0   0   0   0   0

以获得正确的输出,但是当我尝试使用iloc时,它会给我iLocation based boolean indexing on an integer type is not available。我正在尝试使用iloc,因为ix现在已贬值。

df.iloc[(df>0).any(1)]

3 个答案:

答案 0 :(得分:3)

删除iloc

df[(df>0).any(1)] # or df.loc[(df>0).any(1)]
Out[185]: 
   a  b  c  d  e  f
1  0  0  0  0  0  1
5  0  0  5  0  0  0
6  1  0  0  0  0  0
8  0  0  0  1  0  0
9  1  0  0  0  0  0

答案 1 :(得分:0)

或者,您可以迭代df行并检查所有行值是否等于0。如果是这种情况,则删除相应的行。例如:

for index, row in df.iterrows():
  if (all(values == 0 for values in row.values)):
    df=df.drop(index)

上面的代码产生所需的输出。

答案 2 :(得分:0)

这里不需要使用.iloc,只需使用df[(df>0).any(1)],它就会为您提供所需的输出。

但是,如果您想使用.iloc进行操作,请执行以下操作: 您想做的是将熊猫系列对象传递给.iloc,从而出错。

将熊猫系列转换为列表1,然后传递到.iloc,即>> >> p

df.iloc[list((df>0).any(1))]
相关问题