Это связано с тем, что столбец «месяц» в данных о рейсе имеет тип category
. Таким образом, когда он не сопоставлен, он создает pd.CategoricalIndex
, а «total» не является одной из допустимых категорий.
Раствор 1
Самым быстрым и простым решением было бы привести этот столбец к типу object
:
import pandas as pd
import seaborn
flights = seaborn.load_dataset('flights')
# Casting here
flights['month'] = flights.month.astype('O')
# Should work as intended now
flights_indexed = flights.set_index(['year','month'])
flights_unstacked = flights_indexed.unstack()
flights_unstacked['passengers','total'] = flights_unstacked.sum(axis=1)
Здесь - дополнительная информация о categorical
данных.
Решение 2
Как вы могли бы справиться с этим, сохраняя categorical
тип данных.
import pandas as pd
import seaborn
flights = seaborn.load_dataset('flights')
flights.month.dtype
Показывает категории этого поля как ...
CategoricalDtype(categories=['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November',
'December'],
ordered=False)
Итак, в этом случае вы можете увидеть 12 категорий, месяцы «январь» .. «декабрь».
Вы можете добавить дополнительные категории, используя:
flights.month.cat.add_categories('total', inplace=True)
И снова проверяем категории ...
flights.month.dtype
CategoricalDtype(categories=['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November',
'December', 'total'],
ordered=False)
«Всего» было добавлено в качестве допустимой категории.
Теперь должно работать:
flights_indexed = flights.set_index(['year','month'])
flights_unstacked = flights_indexed.unstack()
flights_unstacked['passengers','total'] = flights_unstacked.sum(axis=1)