Fix Python – How do I delete a column that contains only zeros in Pandas?


Asked By – user2587593

I currently have a dataframe consisting of columns with 1’s and 0’s as values, I would like to iterate through the columns and delete the ones that are made up of only 0’s. Here’s what I have tried so far:

ones = []
zeros = []
for year in years:
    for i in range(0,599):
        if year[str(i)].values.any() == 1:
        if year[str(i)].values.all() == 0:
    for j in ones:
        if j in zeros:
    for q in zeros:
        del year[str(q)]

In which years is a list of dataframes for the various years I am analyzing, ones consists of columns with a one in them and zeros is a list of columns containing all zeros. Is there a better way to delete a column based on a condition? For some reason I have to check whether the ones columns are in the zeros list as well and remove them from the zeros list to obtain a list of all the zero columns.

Now we will see solution for issue: How do I delete a column that contains only zeros in Pandas?


df.loc[:, (df != 0).any(axis=0)]

Here is a break-down of how it works:

In [74]: import pandas as pd

In [75]: df = pd.DataFrame([[1,0,0,0], [0,0,1,0]])

In [76]: df
   0  1  2  3
0  1  0  0  0
1  0  0  1  0

[2 rows x 4 columns]

df != 0 creates a boolean DataFrame which is True where df is nonzero:

In [77]: df != 0
       0      1      2      3
0   True  False  False  False
1  False  False   True  False

[2 rows x 4 columns]

(df != 0).any(axis=0) returns a boolean Series indicating which columns have nonzero entries. (The any operation aggregates values along the 0-axis — i.e. along the rows — into a single boolean value. Hence the result is one boolean value for each column.)

In [78]: (df != 0).any(axis=0)
0     True
1    False
2     True
3    False
dtype: bool

And df.loc can be used to select those columns:

In [79]: df.loc[:, (df != 0).any(axis=0)]
   0  2
0  1  0
1  0  1

[2 rows x 2 columns]

To “delete” the zero-columns, reassign df:

df = df.loc[:, (df != 0).any(axis=0)]

This question is answered By – unutbu

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0