tam
tam

Reputation: 54

column is not getting dropped

Why column A is not getting dropped in train,valid,test data frames?

import pandas as pd 

train = pd.DataFrame({'A': [0, 1, 2, 3, 4],'B': [5, 6, 7, 8, 9],'C': ['a', 'b', 'c', 'd', 'e']})
test  = pd.DataFrame({'A': [0, 1, 2, 3, 4],'B': [5, 6, 7, 8, 9],'C': ['a', 'b', 'c', 'd', 'e']})
valid = pd.DataFrame({'A': [0, 1, 2, 3, 4],'B': [5, 6, 7, 8, 9],'C': ['a', 'b', 'c', 'd', 'e']})

for df in [train,valid,test]:
    df = df.drop(['A'],axis=1)

print('A' in train.columns)
print('A' in test.columns)
print('A' in valid.columns)
#True
#True
#True

Upvotes: 1

Views: 75

Answers (1)

jezrael
jezrael

Reputation: 863531

You can use inplace=True parameter, because DataFrame.drop function working also inplace:

for df in [train,valid,test]:
    df.drop(['A'],axis=1, inplace=True)

print('A' in train.columns)
False
print('A' in test.columns)
False
print('A' in valid.columns)
False

Reason why is not removed column is df is not assign back, so DataFrames are not changed.


Another idea is create list of DataFrames and assign each changed DataFrame back:

L = [train,valid,test]
for i in range(len(L)):
    L[i] = L[i].drop(['A'],axis=1)

print (L)
[   B  C
0  5  a
1  6  b
2  7  c
3  8  d
4  9  e,    B  C
0  5  a
1  6  b
2  7  c
3  8  d
4  9  e,    B  C
0  5  a
1  6  b
2  7  c
3  8  d
4  9  e]

Upvotes: 3

Related Questions