AttributeError: у объекта 'str' нет атрибута 'loc' - PullRequest
0 голосов
/ 07 июня 2018

Пытаясь собрать значения возраста, используя цикл for, как показано ниже

for dataset in train:
dataset.loc[(dataset['age'] > 15) & (dataset['age'] <= 25), 'age'] = 1
dataset.loc[(dataset['age'] > 25) & (dataset['age'] <= 35), 'age'] = 2
dataset.loc[(dataset['age'] > 35) & (dataset['Age'] <= 45), 'age'] = 3
dataset.loc[(dataset['age'] > 45) & (dataset['age'] <= 55), 'age'] = 4
dataset.loc[ dataset['age'] > 55, 'age']}

Ошибка:

AttributeError: 'str' object has no attribute 'loc'

Я ищу свой набор данных, подобный приведенному ниже:

age(in existing dataset)           age(in existing dataset)
25                                 1
35                                 2
45                                 3
73                                 4

Ответы [ 2 ]

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

Я считаю, что нужно пропустить цикл, потому что если train равно DataFrame, тогда dataset являются именами столбцов, очевидно, string s:

np.random.seed(100)
train = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=['age','col1','col2'])
print (train)
   age  col1  col2
0    8     8     3
1    7     7     0
2    4     2     5

for dataset in train:
    print (dataset)

age
col1
col2

train.loc[(train['age'] > 15) & (train['age'] <= 25), 'new'] = 1
train.loc[(train['age'] > 25) & (train['age'] <= 35), 'new'] = 2
train.loc[(train['age'] > 35) & (train['age'] <= 45), 'new'] = 3
train.loc[(train['age'] > 45) & (train['age'] <= 55), 'new'] = 4
train.loc[ train['age'] > 55, 'new'] = 5

Лучше использоватьpd.cut:

r = [0, 25, 35, 45, 55, 120]
g = [1,2,3,4,5]
train['new'] = pd.cut(train['age'], bins=r, labels=g)
0 голосов
/ 07 июня 2018

Кажется, ваш набор данных является строкой, а строка не имеет атрибута или метода loc.Проверьте тип вашего набора данных с помощью

type()

или

isinstance()

и убедитесь, что это правильный тип данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...