Dataframe - AttributeError: у объекта 'NoneType' нет атрибута 'iloc' - PullRequest
0 голосов
/ 30 июня 2018

Я не могу понять, почему эта ошибка есть в коде. Вчера все работало абсолютно нормально, и я получал правильный результат.

for j in range(column): #Column is the number of columns in the dataframe 'traindata'
    if np.all(traindata.iloc[:, j] == 0): #Compare all values in a column to 0 
        traindata = traindata.drop(traindata.columns[j], axis=1, inplace=True)                
print(traindata.shape)

Ошибка:

AttributeError: 'NoneType' object has no attribute 'iloc'. 

Я пытался выяснить, в чем проблема, но не нашел правильного ответа

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Проблема от: traindata = traindata.drop(traindata.columns[j], axis=1, inplace=True). Вы можете проверить значение traindata сразу после него, добавив одну строку кода print(traindata), и вы увидите, что он возвращает «None».

Вы можете изменить на: traindata.drop(traindata.columns[j], axis=1, inplace=True)

Однако может появиться новая ошибка (IndexError: одиночный позиционный индексатор выходит за пределы), поскольку вы продолжаете отбрасывать столбцы.

0 голосов
/ 30 июня 2018

Вот полный код

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp

from sklearn.model_selection import train_test_split
from sklearn.model_selection import learning_curve
from sklearn.model_selection import validation_curve
from sklearn.model_selection import cross_val_score
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)


traindata = pd.read_csv('santandertrain.csv')
traindata_copy = traindata.copy()
traindata = pd.DataFrame(traindata)
print(traindata.shape)
[row, column] = traindata.shape

# testdata = pd.read_csv('santandertest.csv')
# testdata_copy = testdata.copy()
# print(testdata.shape) # (49342, 4992)

# print(traindata.describe().T)
# print(traindata.isnull().sum()) There are no NA values


for j in range(column):
    if np.all((traindata.iloc[:, j]) == 0):
        traindata = traindata.drop(traindata.columns[j], axis=1, inplace=True)
print(traindata.shape)

Когда я запускаю этот код ниже, .iloc отлично работает с данными обучения

print(traindata.iloc[1:10, 0:5])
...