为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2021-12-09 10:54:44
我在看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(),互联网上的信息也不多。在这种情况下添加此方法的主要好处是什么?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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

如果分类数据是有序的(s.cat.ordered == True),那么分类的顺序就有意义并且某些操作是可能的。如果分类是无序的,.min()/.max() 将引发 TypeError。

和:

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


查看完整回答
反对 回复 2021-12-09
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-12-09
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

我们可以从 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 : boolean, (default False) 此分类是否被视为有序分类。如果为 True,则会对结果分类进行排序。有序分类在排序时尊重其类别属性的顺序(如果提供,则反过来是类别参数)。


查看完整回答
反对 回复 2021-12-09
  • 3 回答
  • 0 关注
  • 420 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信