pd.Series.nunique
вызовы pd.Series.unique
под капотом:
def nunique(self, dropna=True):
uniqs = self.unique()
n = len(uniqs)
if dropna and isna(uniqs).any():
n -= 1
return n
pd.Series.unique
использует хеширование, во многом как встроенный в Python set
под капотом:
Уникальная хеш-таблица, поэтому НЕ сортируется.
По крайней мере одно из значений в одном из рядов в train_df
содержиттолковый словарь.Словари не являются хэшируемыми.Таким образом, вы увидите TypeError: unhashable type: 'dict'
.
Чтобы увидеть, какие серии включают в себя какие типы, вы можете использовать словарное понимание:
type_dict = {col: set(map(type, train_df[col].values)) for col in train_df}
Вот тривиальный пример:
df = pd.DataFrame({'A': [1, 'a', 'b', 4, {'some_dict': 3}], 'B': list(range(5))})
type_dict = {col: set(map(type, df[col].values)) for col in df}
print(type_dict)
{'A': {dict, int, str}, 'B': {numpy.int64}}
Чтобы использовать nunique
для подсчета уникальных элементов, вам необходимо очистить ваши данные, чтобы убедиться, что ваш фрейм данных не содержит нехешируемых значений.