I have some data and when I import it I get the following unneeded columns I'm looking for an easy way to delete all of these
'Unnamed: 24', 'Unnamed: 25', 'Unnamed: 26', 'Unnamed: 27',
'Unnamed: 28', 'Unnamed: 29', 'Unnamed: 30', 'Unnamed: 31',
'Unnamed: 32', 'Unnamed: 33', 'Unnamed: 34', 'Unnamed: 35',
'Unnamed: 36', 'Unnamed: 37', 'Unnamed: 38', 'Unnamed: 39',
'Unnamed: 40', 'Unnamed: 41', 'Unnamed: 42', 'Unnamed: 43',
'Unnamed: 44', 'Unnamed: 45', 'Unnamed: 46', 'Unnamed: 47',
'Unnamed: 48', 'Unnamed: 49', 'Unnamed: 50', 'Unnamed: 51',
'Unnamed: 52', 'Unnamed: 53', 'Unnamed: 54', 'Unnamed: 55',
'Unnamed: 56', 'Unnamed: 57', 'Unnamed: 58', 'Unnamed: 59',
'Unnamed: 60'
They are indexed by 0-indexing so I tried something like
df.drop(df.columns[[22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32 ,55]], axis=1, inplace=True)
But this isn't very efficient. I tried writing some for loops but this struck me as bad Pandas behaviour. Hence i ask the question here.
I've seen some examples which are similar (Drop multiple columns pandas) but this doesn't answer my question.
df = df[[col for col in df.columns if not ('Unnamed' in col)]]
The by far the simplest approach is:
yourdf.drop(['columnheading1', 'columnheading2'], axis=1, inplace=True)
Simple and Easy. Remove all columns after the 22th.
df.drop(columns=df.columns[22:]) # love it
You can do this in one line and one go:
df.drop([col for col in df.columns if "Unnamed" in col], axis=1, inplace=True)
This involves less moving around/copying of the object than the solutions above.
The below worked for me:
for col in df:
if 'Unnamed' in col:
#del df[col]
print col
try:
df.drop(col, axis=1, inplace=True)
except Exception:
pass
You can just pass the column names as a list with specifying the axis as 0 or 1
By default axis=0
data.drop(["Colname1","Colname2","Colname3","Colname4"],axis=1)
Not sure if this solution has been mentioned anywhere yet but one way to do is is pandas.Index.difference
.
>>> df = pd.DataFrame(columns=['A','B','C','D'])
>>> df
Empty DataFrame
Columns: [A, B, C, D]
Index: []
>>> to_remove = ['A','C']
>>> df = df[df.columns.difference(to_remove)]
>>> df
Empty DataFrame
Columns: [B, D]
Index: []
This is probably a good way to do what you want. It will delete all columns that contain 'Unnamed' in their header.
for col in df.columns:
if 'Unnamed' in col:
del df[col]
My personal favorite, and easier than the answers I have seen here (for multiple columns):
df.drop(df.columns[22:56], axis=1, inplace=True)
Source: Stackoverflow.com