#python #pandas
#python #pandas
Вопрос:
Я просматривал часть исходного кода в библиотеке fastai, и функция train_cats
читается следующим образом:
def train_cats(df):
"""
Change any columns of strings in a panda's dataframe to a column
of catagorical values. This applies the changes inplace.
"""
for n,c in df.items():
if is_string_dtype(c): df[n] = c.astype('category').cat.as_ordered()
Я понимаю, что делает функция, но я не был уверен, чего должна была достичь as_ordered
часть.
Я попытался просмотреть документацию по нему, и она была скудной. К моему удивлению, в as_ordered()
Интернете тоже не так много информации.
В чем основное преимущество добавления этого метода в данных обстоятельствах?
Спасибо.
Ответ №1:
Вам следует взглянуть на раздел «Сортировка и порядок» по этой ссылке: Документация Pandas по Categorical. В нем говорится, что:
Если категориальные данные упорядочены (s.cat.ordered == True), то порядок категорий имеет значение и возможны определенные операции. Если категориальный параметр неупорядочен, .min() /.max() вызовет ошибку типа.
И:
Вы можете упорядочить категориальные данные с помощью as_ordered() или неупорядочить с помощью as_unordered(). Они по умолчанию вернут новый объект.
Комментарии:
1. По сути, это означает, что каждый столбец, который преобразуется в категорию, будет иметь предполагаемый порядок и соответствующие min (), max () и т.д.?
2. ДА. Вот и все!
Ответ №2:
Мы можем получить некоторую информацию из pandas.Categorical
s=pd.Series(list('zbdce')).astype('category')
s
0 z
1 b
2 d
3 c
4 e
dtype: category
Categories (5, object): [b, c, d, e, z]
s.cat.as_ordered()
0 z
1 b
2 d
3 c
4 e
dtype: category
Categories (5, object): [b < c < d < e < z]
pd.Categorical(list('zbdce'))
[z, b, d, c, e]
Categories (5, object): [b, c, d, e, z]
pd.Categorical(list('zbdce'),ordered=True)
[z, b, d, c, e]
Categories (5, object): [b < c < d < e < z]
упорядоченный : логическое значение (по умолчанию False) Является ли эта категория
обрабатывается как упорядоченная категория. Если True, результирующий категориальный
будет упорядочен. Упорядоченная категория учитывает, что при сортировке
порядок его атрибута categories (который, в свою очередь, является категориями
аргумент, если указан).
Ответ №3:
Это вспомогательная функция, которая вызывается set_ordered
с первым аргументом, установленным в True .
Вот set_ordered
:
def set_ordered(self, value, inplace=False):
"""
Set the ordered attribute to the boolean value.
Parameters
----------
value : bool
Set whether this categorical is ordered (True) or not (False).
inplace : bool, default False
Whether or not to set the ordered attribute in-place or return
a copy of this categorical with ordered set to the value.
"""
inplace = validate_bool_kwarg(inplace, 'inplace')
new_dtype = CategoricalDtype(self.categories, ordered=value)
cat = self if inplace else self.copy()
cat._dtype = new_dtype
if not inplace:
return cat
Таким образом, это просто устанавливает тот факт, что вы хотите рассматривать свои категориальные данные как имеющие порядок. Здесь есть еще несколько скудных документов:https://pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.api.types.CategoricalDtype.ordered.html
Некоторое обсуждение можно найти здесь: https://github.com/pandas-dev/pandas/issues/14711