使用python删除数据框中具有零值的多个行

时间:2016-09-05 17:33:14

标签: python excel dataframe

大家好我需要一些python的帮助。

我正在使用包含多行的excel,其中一些行在所有列中都没有值,所以我需要删除那些行。

In 
 id a b c d 
 a  0 1 5 0 
 b  0 0 0 0
 c  0 0 0 0
 d  0 0 0 1 
 e  1 0 0 1

Out 
id a b c d 
a  0 1 5 0
d  0 0 0 1 
e  1 0 0 1

我认为在显示不包含零的行,但不起作用,因为删除所有行为零而没有零

path = '/Users/arronteb/Desktop/excel/ejemplo1.xlsx'
xlsx = pd.ExcelFile(path)
df = pd.read_excel(xlsx,'Sheet1')
df_zero = df[(df.OTC != 0) & (df.TM != 0) & (df.Lease != 0) & (df.Maint != 0) & (df.Support != 0) & (df.Other  != 0)]

然后我想只需显示零

的列
In 
id a b c d 
a  0 1 5 0 
b  0 0 0 0
c  0 0 0 0
d  0 0 0 1 
e  1 0 0 1


Out 
id a b c d 
b  0 0 0 0
c  0 0 0 0   

所以我做了一点改变,我有类似的东西

path = '/Users/arronteb/Desktop/excel/ejemplo1.xlsx'
xlsx = pd.ExcelFile(path)
df = pd.read_excel(xlsx,'Sheet1')
df_zero = df[(df.OTC == 0) & (df.TM == 0) & (df.Lease == 0) & (df.Maint == 0) & (df.Support == 0) & (df.Other  == 0)]

通过这种方式,我只需要用零填充列。我需要一种方法从原始输入中删除这2行,并接收没有该行的输出。谢谢,对不好的英语抱歉,我也在努力

2 个答案:

答案 0 :(得分:2)

对于此数据框:

df
Out: 
  id  a  b  c  d  e
0  a  2  0  2  0  1
1  b  1  0  1  1  1
2  c  1  0  0  0  1
3  d  2  0  2  0  2
4  e  0  0  0  0  2
5  f  0  0  0  0  0
6  g  0  2  1  0  2
7  h  0  0  0  0  0
8  i  1  2  2  0  2
9  j  2  2  1  2  1

暂时设置索引:

df = df.set_index('id')

删除包含全零的行并重置索引:

df = df[~(df==0).all(axis=1)].reset_index()

df
Out: 
  id  a  b  c  d  e
0  a  2  0  2  0  1
1  b  1  0  1  1  1
2  c  1  0  0  0  1
3  d  2  0  2  0  2
4  e  0  0  0  0  2
5  g  0  2  1  0  2
6  i  1  2  2  0  2
7  j  2  2  1  2  1

答案 1 :(得分:2)

根据您的输入,您可以按所有列是否为零进行分组,然后访问它们,例如:

groups = df.groupby((df.drop('id', axis= 1) == 0).all(axis=1))
all_zero = groups.get_group(True)
non_all_zero = groups.get_group(False)