列未删除

时间:2019-09-05 11:33:56

标签: python pandas

为什么列A不会掉入训练,有效的测试数据帧中?

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

1 个答案:

答案 0 :(得分:3)

您可以使用inplace=True参数,因为DataFrame.drop函数也可以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

为什么未删除列df的原因未分配回去,因此不会更改DataFrame。


另一个想法是创建DataFrames列表,并将每个更改的DataFrame分配回去:

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]
相关问题