对于已有分类数组的元素,主要有增、删、改和查等操作。[大谦MATLAB,dqmatlab点com]
查找分类值
查找分类值,指的是对分类数组中的元素进行索引和切片。通过布尔索引,可以对分类数组中的元素进行筛选。
【MATLAB】
下面创建一个分类数组S。
>> S=categorical({'XL';'L';'M';'S';'M';'L';'XXL'})
通过索引获取分类数组中的第2个元素。
>> S(2) %索引
ans=
categorical
L
通过切片获取分类数组中的第1到第3个元素。
>> S(1:3) %切片
ans=
3×1 categorical 数组
XL
L
M
【Python】
在Python中,首先用Categorical函数创建一个分类数组cat。
>>> import pandas as pd
>>> cat=pd.Categorical(['XL', 'L', 'M', 'S', 'M', 'L', 'XXL'])
通过索引获取分类数组中的第2个元素。
>>> cat[1]
'L'
通过切片获取分类数组中的第1到第3个元素。
>>> cat[0:2]
['XL', 'L']
Categories(5, object): ['L', 'M', 'S', 'XL', 'XXL']
下面通过布尔索引对分类数组中的元素进行筛选。
【MATLAB】
首先用categorical函数创建分类数组S。
>> S=categorical({'XL';'L';'M';'S';'M';'L';'XXL'})
查找S中元素“L”对应的布尔值。
>> TI=(S=='L');
用得到的布尔值对S进行索引,筛选出所有的“L”。
>> S(TI)
ans=
2×1 categorical 数组
L
L
【Python】
首先用Categorical函数创建分类数组cat。
>>> import pandas as pd
>>> cat=pd.Categorical(['XL', 'L', 'M', 'S', 'M', 'L', 'XXL'])
查找cat中元素“M”对应的布尔值。
>>> id=(cat=="M")
用得到的布尔值对cat进行索引,筛选出所有的“M”。
>>> cat[id]
['M', 'M']
Categories(5, object): ['S' < 'M' < 'L' < 'XL' < 'XXL']
增加类别
MATLAB和Python都提供了函数向分类数组增加新的类别。注意,添加的是类别,不是分类数组元素。
【MATLAB】
用addcats函数可以向分类数组添加类别,可以添加到类别的末尾,也可以添加到有序分类数组的类别的指定位置。
下面创建一个分类数组A:
>> A=categorical({'大','小','中';'小','大','小'});
>> categories(A)
ans=
'中'
'大'
'小'
用addcats函数在A的类别的末尾添加两个类别。
>> B=addcats(A, {'很大','微小'});
>> categories(B)
ans=
'中'
'大'
'小'
'很大'
'微小'
为了演示在指定位置插入类别,先创建一个有序分类数组。在命令窗口中输入:
>> A=categorical({'m' 'l'; 's' 'xl'; 'l' 'm'},{'s' 'm' 'l' 'xl'},'Ordinal',true)
A=
m l
s xl
l m
A是有序分类数组,指定的排序为s < m < l < xl。下面在s类别前添加类别xs。
>> B=addcats(A, 'xs','Before','s');
>> categories(B)
ans=
'xs'
's'
'm'
'l'
'xl'
【Python】
用add_categories函数向分类数组类别的末尾添加新的类别。下面创建一个分类数组cat:
>>> import pandas as pd
>>> cat=pd.Categorical(['大', '小', '中', '小', '大', '小'])
>>> cat.categories
Index(['S', 'M', 'L', 'XL', 'XXL'], dtype='object')
用add_categories函数向分类数组的类别添加两个新的类别。
>>> cat.add_categories(['很大','微小'])
['大', '小', '中', '小', '大', '小']
Categories(5, object): ['中', '大', '小', '很大', '微小']
修改类别
分类数组创建后,可以修改它的类别。
【MATLAB】
用setcats函数可以为分类数组设置新类别。对于下面的分类数组A:
>> A=categorical({'日用品','生鲜','熟食','熟食','日用品','生鲜'});
>> A
A=
1×6 categorical 数组
日用品 生鲜 熟食 熟食 日用品 生鲜
重新设置新类别。
>> B=setcats(A, {'日用品','生鲜','粮油'})
B=
1×6 categorical 数组
列 1 至 6
日用品 生鲜 <undefined> <undefined> 日用品 生鲜
原分类数组A中没有新指定类别的元素用<undefined>表示。可以直接赋值,如:
>> B(3)= '粮油';
>> B(4)= '粮油';
>> B
B=
1×6 categorical 数组
日用品 生鲜 粮油 粮油 日用品 生鲜
【Python】
Python中用set_categories函数为分类数组设置新类别。对于下面的分类数组cat:
>>> import pandas as pd
>>> cat=pd.Categorical(['日用品','生鲜','熟食','熟食','日用品','生鲜'])
>>> cat
['日用品', '生鲜', '熟食', '熟食', '日用品', '生鲜']
Categories(3, object): ['日用品', '熟食', '生鲜']
重新设置新类别。
>>> B=cat.set_categories(['日用品','生鲜','粮油'])
>>> B
['日用品', '生鲜', NaN, NaN, '日用品', '生鲜']
Categories(3, object): ['日用品', '生鲜', '粮油']
原分类数组中没有新指定类别的元素用NaN表示。可以直接赋值,如:
>> B[2]= '粮油'
>> B[3]= '粮油'
>> B
['日用品', '生鲜', '粮油', '粮油', '日用品', '生鲜']
Categories(3, object): ['日用品', '生鲜', '粮油']
重命名类别
可以对分类数组中的类别重新命名。
【MATLAB】
MATLAB中用renamecats函数对分类数组的类别重新命名。下面创建分类数组S,将类别“XXL”重命名为“VL”。
>> S=categorical({'XL';'L';'M';'S';'M';'L';'XXL'});
>> R=renamecats(S,{'S','M','L','XL','VL'})
R=
7×1 categorical 数组
XL
S
M
L
M
S
VL
【Python】
Python中用pandas包的rename_categories函数对分类数组的类别重命名。下面创建分类数组cat,将类别“XXL”重命名为“VL”。
>>> import pandas as pd
>>> cat=pd.Categorical(['XL', 'L', 'M', 'S', 'M', 'L', 'XXL'])
>>> cat.rename_categories({'XXL': 'VL'})
['XL', 'L', 'M', 'S', 'M', 'L', 'VL']
Categories(5, object): ['L', 'M', 'S', 'XL', 'VL']
删除类别
MATLAB和Python都提供了函数删除分类数组中不用的类别,或删除指定类别。
【MATLAB】
MATLAB用removecats函数删除没使用的类别或指定的类别。
下面的分类数组A定义了3个类别。
>> A=categorical({'red';'blue';'blue';'red';'blue';'red'},{'red','blue';'pink'});
>> categories(A)
ans=
'red'
'blue'
'pink'
A中元素只用到了两个类别,用removecats函数删除没有用到的“pink”类别。
>> B=removecats(A)
ans=
'red'
'blue'
也可以指定“pink”类别进行删除。
>> B=removecats(A, 'pink');
【Python】
Python中用pandas包的remove_unused_categories函数删除没使用的类别,用remove_categories函数删除指定的类别。
下面创建一个分类数组cat:
>>> import pandas as pd
>>> cat=pd.Categorical(['red','blue','blue','red','blue','red'],categories=['red','blue','pink'])
cat中只用到了两个类别,用remove_unused_categories函数删除没有用到的“pink”类别。
>>> cat.remove_unused_categories()
['red', 'blue', 'blue', 'red', 'blue', 'red']
Categories(2, object): ['red', 'blue']
也可以用remove_categories函数指定“pink”类别进行删除。
>>> cat.remove_categories('pink')
['red', 'blue', 'blue', 'red', 'blue', 'red']
Categories(2, object): ['blue', 'red']