title: AttributeError: 'numpy.ndarray' object has no attribute 'iloc'
body: <p>I am trying to combine two machine learning algorithm using stacking to achieve greater results but am failing in some of the aspects.
  Here's my code:</p>
  
  <p>class Ensemble(threading.Thread):
      "Stacking with three Classification Models to improve the accuracy of Predictions"
      def <strong>init</strong>(self, X, Y, XT, YT, accLabel=None):
          threading.Thread.<strong>init</strong>(self)
          self.X = X
          self.Y = Y
          self.XT=XT
          self.YT=YT
          self.accLabel= accLabel</p>
  
  <pre><code>def Stacking(self,model,n_fold,train,test,y):
  
      folds=StratifiedKFold(n_splits=n_fold,random_state=1)
      test_pred=np.empty((test.shape[0],1),float)
      train_pred=np.empty((0,1),float)
      for train_indices,val_indices in folds.split(train,y):
          x_train,x_val=train.iloc[train_indices],train.iloc[val_indices]
          y_train,y_val=y.iloc[train_indices],y.iloc[val_indices]
  
          model.fit(X=x_train,y=y_train)
          train_pred=np.append(train_pred,model.predict(x_val))
          test_pred=np.append(test_pred,model.predict(test))
      return test_pred.reshape(-1,1),train_pred   
  
  def run(self):
      X = np.zeros(self.X.shape)
      Y = np.zeros(self.Y.shape)
      XT = np.zeros(self.XT.shape)
      YT = np.zeros(self.YT.shape)
      np.copyto(X, self.X)
      np.copyto(Y, self.Y)
      np.copyto(XT, self.XT)
      np.copyto(YT, self.YT)
  
      model1 = tree.DecisionTreeClassifier(random_state=1)
      n_fold=4
      test_pred1 ,train_pred1=self.Stacking(model1, n_fold, X, XT, Y)
      train_pred1=pd.DataFrame(train_pred1)
      test_pred1=pd.DataFrame(test_pred1)
  
      model2 = KNeighborsClassifier()
      test_pred2 ,train_pred2=self.Stacking(model2, n_fold, X, XT, Y)
      train_pred2=pd.DataFrame(train_pred2)
      test_pred2=pd.DataFrame(test_pred2)
  
      df = pd.concat([train_pred1, train_pred2], axis=1)
      df_test = pd.concat([test_pred1, test_pred2], axis=1)
      model = LogisticRegression(random_state=1)
      model.fit(df,Y)
      sd = model.score(df_test, YT)
      acc = (sum(sd == YT) / len(YT) * 100)
      print("Accuracy of Ensemble Learning Model is : %.2f" % acc+' %')
      print('=' * 100)
      if self.accLabel: self.accLabel.set("Accuracy of Ensembelance Learning: %.2f" % (acc)+' %')
  </code></pre>
  
  <p>The error is in 'iloc'  inside Stacking method.</p>
  
  <p>I have been constantly getting the error of np.ndarray has no attribute 'iloc'. I tried to search but couldn't find any specific link though I think this has something to do with iloc belonging to np.ndarray.
  If someone could please help me with this!!</p>