大熊猫不放弃列

时间:2017-08-09 09:57:29

标签: python arrays pandas numpy

您好我已经尝试根据布尔数组删除列但是由于一些奇怪的原因,pandas似乎根本没有删除列。

布尔数组是和(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,并且能够准确地打印出col变量但是由于某种原因它不会丢弃列。

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

2 个答案:

答案 0 :(得分:4)

您不需要loop的IIUC:

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

答案 1 :(得分: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掩码选择列,就像在另一个答案中一样。