python - 列没有被删除
问题描述
为什么列 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
参数,因为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
是未分配回,因此 DataFrames 未更改。
另一个想法是创建 DataFrame 列表并将每个更改的 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]
推荐阅读
- angularjs - AngularJS 捕获图像网络摄像头
- c++14 - 我不明白“i”代表for循环内的索引
- google-tag-manager - 如何在 Google 跟踪代码管理器中为表单中的按钮构建触发器?
- azure-blob-storage - 无法从 Azure 存储下载大文件
- php - 如何定义while循环导致全局变量并在另一个函数中使用它来处理另一个任务
- javascript - 有没有办法使用 Mocha/Chakram 阻止(失败测试)任何不安全的重定向?
- python - 索引时从列表中删除 '
- csv - 如何在 Nextflow 中访问/操作 splitCSV 运算符的输出?
- javascript - 未定义不是对象 - 反应导航
- android - 在 Win 32 位上安装 Android Studio - 尝试计算所需包时出错