pd.Series.cat.as_ordered()在熊猫中做什么?

时间:2019-03-19 02:28:38

标签: 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部分应该完成什么。

我尝试浏览documentation on it,但它很稀疏。令我惊讶的是,互联网上as_ordered()上也没有很多信息。

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

谢谢。

3 个答案:

答案 0 :(得分:1)

您应该查看以下链接中的排序和顺序部分:Pandas Documentation on Categorical。它说:

  

如果排序了分类数据(s.cat.ordered ==   正确),则类别的顺序具有含义和确定性   操作是可能的。如果分类是无序的,   .min()/。max()将引发TypeError。

并且:

  

您可以将分类数据设置为使用as_ordered()排序,也可以使用as_unordered()进行无序排序。默认情况下,这些将返回一个新对象。

答案 1 :(得分:1)

我们可以从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]
  

ordered:布尔值,(默认为False)此分类是否为   视为有序分类。如果为True,则结果为分类   将被订购。有序的分类方面,在排序时,   其类别属性的顺序(又是类别   参数(如果提供)。

答案 2 :(得分:1)

这是一个辅助函数,它在第一个参数设置为True的情况下调用set_ordered

这里是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