1 分类数据
# 类似.str.<method> .cat.<method>
s = pd.Series(list('xyzx'),dtype='category')#指定数据类型 Categories (3, object): ['x', 'y', 'z']
df = pd.DataFrame({'A':list('xyzx'),'B':list('aabc')},dtype='category')
df.dtypes #查看数据类型
df.B #查看指定列的类型
pd.Series(pd.cut(range(1,10,2),[0,4,6,10])) #生成分箱序列 自动创建分类数据类型
# pd.Categorical() 类似R语言和S-plus中类似的形式来表示分类数据类型
pd.Categorical(list('xyzx'),categories=['y','z','x'],ordered=True) #orderd 默认为Fales,顺序为类别的先后循序,而非值的顺序
# CategoricalDtype 是pd的分类数据对象,可以传入参数
# categories :没有缺失值的不重复序列
# ordered :顺序的空制,默认是有顺序的
from pandas.api.types import CategoricalDtype
c=CategoricalDtype(['a','b','c']) #定义对象
pd.Series(list('abcabc'),dtype=c) #类别指定CategoricalDtype对象
df = pd.read_excel(r'D:\pythonproject\pythonVsc\pandas\data\team.xlsx')
df.team.astype('category') #转换数据类型
c = CategoricalDtype(list('ABCDE')) #定义对象
df.team.astype(c) #应用到类型转换
2 分类的操作
#分类的操作
s = pd.Series(list('abca'),dtype='category')
s.cat.categories=['x','y','z'] #修改分类
s.cat.rename_categories(list('hij')) #修改分类
s.cat.rename_categories({'a':'x','b':'y','c':'z'}) #使用字典修改分类
s.cat.set_categories(['b','c','a']) #设置分类也可修改分类
s.cat.add_categories(['t'])#追加新分类
s.cat.remove_categories(['y']) #删除分类,删除的值使用np.nan代替
s =pd.Series(pd.Categorical(['a','b','a'],categories=['a','b','c','d']))
s.cat.remove_unused_categories() #删除未使用的分类
s = pd.Series(list('abca'),dtype='category')
s.cat.categories #查看分类
s.cat.ordered #是否有序,新生成的分类数据不会自动排序,必须显示传入ordered = True来指示分类
s = pd.Series(pd.Categorical(list('abca'),categories=list('cba')))
s.cat.categories
s.cat.ordered
s.cat.as_ordered() #设置为有序
s.cat.as_unordered() #设置为无序
s.cat.reorder_categories(list('bac'),ordered=True) #重新排序,传入ordered=True