2017-08-09 125 views
1

嗨我试图删除基于布尔数组的列,但由于一些奇怪的原因熊猫似乎并没有放弃列。大熊猫没有掉列

布尔数组是和(376,)。它只包含True和False值。

for x in range(0,len(analysis)-1): 
    if analysis[x] == False: 
     col = dtest.columns[x] 
     dtest.drop(dtest.columns[x],1) 

这是我删除列的代码,本质上分析数组的长度是dtest中的列数。

DTEST是(4209,376)& pandas.core.frame.DataFrame

我试图调试,但它在检测分析的Falses,也能够准确地打印出山坳变量,但它只是由于某种原因不会放下这些列。

非常感谢任何帮助!谢谢:)

回答

4

IIUC你不需要loop

dtest = dtest.loc[:, analysis] 

演示:

In [320]: df = pd.DataFrame(np.random.rand(5, 10), columns=list(range(1, 11))) 

In [321]: df 
Out[321]: 
     1   2   3   4   5   6   7   8   9   10 
0 0.332792 0.927047 0.899874 0.294391 0.762800 0.861521 0.988783 0.475127 0.033096 0.980141 
1 0.447273 0.268828 0.951633 0.947425 0.020006 0.808608 0.607091 0.712309 0.383256 0.248582 
2 0.169946 0.951702 0.671014 0.514326 0.607129 0.227021 0.831474 0.696117 0.799418 0.224851 
3 0.724165 0.748455 0.452430 0.941572 0.873344 0.877872 0.925788 0.183115 0.113217 0.072717 
4 0.303488 0.426459 0.750076 0.225662 0.298983 0.729585 0.692489 0.934778 0.124634 0.274208 

In [322]: analysis = np.random.choice([True, False], 10) 

In [323]: analysis 
Out[323]: array([ True, True, True, False, True, True, True, False, False, True], dtype=bool) 

In [324]: df = df.loc[:, analysis] 

In [325]: df 
Out[325]: 
     1   2   3   5   6   7   10 
0 0.332792 0.927047 0.899874 0.762800 0.861521 0.988783 0.980141 
1 0.447273 0.268828 0.951633 0.020006 0.808608 0.607091 0.248582 
2 0.169946 0.951702 0.671014 0.607129 0.227021 0.831474 0.224851 
3 0.724165 0.748455 0.452430 0.873344 0.877872 0.925788 0.072717 
4 0.303488 0.426459 0.750076 0.298983 0.729585 0.692489 0.274208 
+0

谢谢!像魅力工作 – kimpster

+0

@ kimpster,很高兴它帮助:) – MaxU

3

你需要指定输出回:

cols = [] 
for x in range(0,len(analysis)): 
    if analysis[x] == False: 
     col = dtest.columns[x] 
     cols.append(col) 

dtest = dtest.drop(cols,1) 
print (dtest) 
    0 2 
0 1 3 

,但更好的是True面具像另一个答案只选择列。