我正在查看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()
上也没有很多信息。
在这种情况下添加此方法的主要好处是什么?
谢谢。
答案 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