Python 列不会被删除

Python 列不会被删除,python,pandas,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.D

为什么列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

您可以使用
inplace=True
参数,因为函数也可以
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
未分配回,因此数据帧不会更改


另一个想法是创建数据帧列表并将每个更改的数据帧分配回:

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]

除非您使用
inplace=True
,否则许多方法将返回副本。使用标志或重新分配。另外,请注意,重新分配是将更改绑定到要丢弃的名称
df
。由于重新分配了名称,您不再对train/test/valid引用的原始数据帧进行更改。它不会被删除,因为您没有从列表中更改
df
,而是在for循环中重新分配了一个名为
df
的新变量。因此,是的,您需要使用
inplace=True
更改列表中的实际
df