Pandas str.extract для совместного использования на отфильтрованных данных и кросс-таблице?

1

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

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 на перекрестной вкладке?

Теги:
python-3.x

1 ответ

0

Ошибка

Если у вас есть 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'])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню