参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》
pandas中有专门的分类数据类型,虽然平时用的不多,但是也需要了解一下。读取spss文件时会自动生成分类数据类型。本次博客了解一下分类数据的生成和基础操作。
还是先导入包
import numpy as np
import pandas as pd
分类数据生成
#使用 dtype="category" 来指定数据类型:
s = pd.Series(["a", "b", "c", "a"], dtype="category")
s
#.astype('category') 可以转换为分类数据:
df = pd.DataFrame({"A": ["a", "b", "c", "a"]})
df["B"] = df["A"].astype('category')
#分箱数据自动变为分类数据
pd.Series(pd.cut(range(1,10,2),[0,5,10]))
#pandas.Categorical 可以创建一个类型数据序列到 DataFrame 中:
raw_cat = pd.Categorical(["a", "b", "c", "d"],
categories=["b", "c", "d"],
ordered=False)
s = pd.Series(raw_cat)
s
类型转化
先读取案例数据
data = 'https://www.gairuo.com/file/data/dataset/team.xlsx'
df = pd.read_excel(data)
df.head()
将team一列转化为分类数据‘
df.team.astype('category')
’
修改分类
s = pd.Series(["a", "b", "c", "a"], dtype="category")
s.cat.categories=['0','1','2']
s
将abc类别改为了012
rename_categories也可以修改
s.cat.rename_categories(['A','B','C'])
s.cat.rename_categories({'a':0,'b':1,'c':2}) #字典修改
s.cat.set_categories(['A','B','C']) #设定分类修改
追加新的分类
s = s.cat.add_categories([4])
s.cat.categories
删除分类
s = s.cat.remove_categories([4])
s
#删除未使用的类别:
s = pd.Series(pd.Categorical(["a", "b", "a"],categories=["a", "b", "c", "d"]))
s.cat.remove_unused_categories() #c为使用,删除
数据里面没c,删掉
顺序
s = pd.Series(pd.Categorical(["a", "b", "c", "a"], ordered=False))
s.sort_values(inplace=True) # 排序
s
#可以使用 as_ordered() 将类别数据设置为排序,或者使用 as_unordered() 将类别数据设置为无序。 这些默认情况下将返回一个新对象。
s.cat.as_ordered()
s.cat.as_unordered()