猿问

pd.Series.cat.as_ordered() 在 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(),互联网上的信息也不多。


在这种情况下添加此方法的主要好处是什么?


幕布斯6054654
浏览 421回答 3
3回答

qq_遁去的一_1

您应该查看此链接中的排序和顺序部分:Pandas Documentation on Categorical。它说:如果分类数据是有序的(s.cat.ordered == True),那么分类的顺序就有意义并且某些操作是可能的。如果分类是无序的,.min()/.max() 将引发 TypeError。和:您可以将分类数据设置为使用 as_ordered() 进行排序或使用 as_unordered() 进行无序排序。默认情况下,这些将返回一个新对象。

素胚勾勒不出你

这是一个辅助函数,调用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

慕虎7371278

我们可以从 pandas.Categoricals=pd.Series(list('zbdce')).astype('category')s0&nbsp; &nbsp; z1&nbsp; &nbsp; b2&nbsp; &nbsp; d3&nbsp; &nbsp; c4&nbsp; &nbsp; edtype: categoryCategories (5, object): [b, c, d, e, z]s.cat.as_ordered()0&nbsp; &nbsp; z1&nbsp; &nbsp; b2&nbsp; &nbsp; d3&nbsp; &nbsp; c4&nbsp; &nbsp; edtype: categoryCategories (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]ordered : boolean, (default False) 此分类是否被视为有序分类。如果为 True,则会对结果分类进行排序。有序分类在排序时尊重其类别属性的顺序(如果提供,则反过来是类别参数)。
随时随地看视频慕课网APP

相关分类

Python
我要回答