Я пытаюсь извлечь выбранную комбинацию слов и крестов в отфильтрованном наборе данных, используя для этого иллюстрацию титанический набор данных.
train = pd.read_csv("d1.csv")
live= train[train['Survived']>0]# filter for survivors
print (live)
for live in live:
live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
pd.crosstab(live['Tt'], live['Sex'])
Я получил ошибку: AttributeError: объект 'str' не имеет атрибута 'Name'
Проверяемый обратно в отфильтрованный набор данных в реальном времени, переменная "Имя" присутствует в наборе данных.
В какой части я ошибался и как мне извлекать ответы, которые показывают выживших только с сексом и tt на перекрестной вкладке?
Если у вас есть for-statement формы for x in df:
то вы в основном говорите: перебирайте все имена столбцов dataframe df
, а во время каждой итерации цикла присваиваете имя столбца переменной x
.
Поэтому давайте посмотрим теперь на ваш цикл for:
for live in live:
live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
Прежде чем эти строки будут выполнены, переменная live
прежнему содержит кадр данных pandas. Однако, если внутри переменной for-loop live
было присвоено имя столбца строкового объекта из блока данных. Отсюда сообщение об ошибке, которое вы получаете.
Я думаю, что вы получите свой предполагаемый результат, если вы просто исключите for-foop из своего кода, например:
train = pd.read_csv("d1.csv")
live= train[train['Survived']>0]# filter for survivors
live['Tt'] = live.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
pd.crosstab(live['Tt'], live['Sex'])