对象创建
可以通过多种方式创建分类对象。下面描述了不同的方式 -
类别
通过在 pandas 对象创建中将 dtype 指定为“类别”。
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print s
它的输出如下 -
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
传递给系列对象的元素数量是四个,但类别只有三个。在输出类别中观察相同。
pd.分类的
使用标准的 pandas Categorical 构造函数,我们可以创建一个类别对象。
pandas.Categorical(values, categories, ordered)
让我们举个例子 -
import pandas as pd
cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat
它的输出如下 -
[a, b, c, a, b, c]
Categories (3, object): [a, b, c]
让我们再举一个例子 -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat
它的输出如下 -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]
在这里,第二个参数表示类别。因此,类别中不存在的任何值都将被视为NaN.
现在,看看下面的例子 -
import pandas as pd
cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat
它的输出如下 -
[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
从逻辑上讲,顺序意味着,a大于b和b大于c.
描述
使用.describe()分类数据上的命令,我们得到类似的输出Series要么DataFrame的type细绳。
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})
print df.describe()
print df["cat"].describe()
它的输出如下 -
cat s
count 3 3
unique 2 2
top c c
freq 2 2
count 3
unique 2
top c
freq 2
Name: cat, dtype: object
获取类别的属性
obj.cat.categories命令用于获取categories of the object.
import pandas as pd
import numpy as np
s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories
它的输出如下 -
Index([u'b', u'a', u'c'], dtype='object')
obj.ordered命令用于获取对象的顺序。
import pandas as pd
import numpy as np
cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered
它的输出如下 -
返回的函数false因为我们没有指定任何顺序。
重命名类别
重命名类别是通过为series.cat.categoriesseries.cat.categories 属性。
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories
它的输出如下 -
Index([u'Group a', u'Group b', u'Group c'], dtype='object')
初始类别[a,b,c]由更新s.cat.categories对象的属性。
添加新类别
使用 Categorical.add.categories() 方法,可以附加新的类别。
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories
它的输出如下 -
Index([u'a', u'b', u'c', 4], dtype='object')
删除类别
使用Categorical.remove_categories()方法,可以删除不需要的类别。
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s
print ("After removal:")
print s.cat.remove_categories("a")
它的输出如下 -
Original object:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
After removal:
0 NaN
1 b
2 c
3 NaN
dtype: category
Categories (2, object): [b, c]
分类数据的比较
在三种情况下可以将分类数据与其他对象进行比较 -
看看下面的例子 -
import pandas as pd
cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)
print cat>cat1
它的输出如下 -
0 False
1 False
2 True
dtype: bool