【pandas教程】pandas特性——类别类型

支持的类型

pandas dtypePython类型numpy类型描述
objectstrstring_, unicode_文本
int64intint_, int8, int16, int32, int64, unit8, unit16, unit32, unit64整数
float64floatfloat_, float16, float32, float64浮点数
boolboolbool_布尔值
datetime64datetime64[ns]datetimeNA
datedelta[ns]NANA时间差
categoryNANA有限长度的文本值列
# 查看df各列数据类型
df.dtypes
# 查看df单列数据类型
df.dtype
# 修改单列数据类型
df['col'].astype('object')
# 修改多列数据类型
df[['col1', 'col2']].apply(pd.to_numeric)
# 字符串类型结合query使用时,要小心字符串类型的数值,必要时转型后在进行筛选
df['col'].astype('object').query('col == "1"')
df['col'].astype('int64').query('col == 1')

类别类型Categoricals

# Series创建category类型
s = pd.Series(['a','b','b','a','a','e'], dtype='category')

# DataFrame创建category类型
df =pd.DataFrame({"id":[1,2,3,4,5,6],"raw_grade":pd.Series(['a','b','b','a','a','e'], dtype='category')})

# astype创建category类型
df =pd.DataFrame({"id":[1,2,3,4,5,6],"raw_grade":['a','b','b','a','a','e']})
df["grade"]=df["raw_grade"].astype("category")

# 注意:使用.cat调用类别类型的相关方法前,需要该列为类别类型:使用astype('category')转换格式
# category类型描述信息
df['grade'].describe()

# 查看category类型
df['grade'].cat.categories

# 查看category类型是否有序
df['grade'].cat.ordered

# Series.cat.categories可以命名不同类型,如果为空,则为缺失类,如果非空,则必需与原分类长度一致
df["grade"].cat.categories =["very good","good","very bad"] # df["grade"].cat.categories是Index(['a', 'b', 'e'], dtype='object')

# Series.cat.set_categories重新排序各类别,并添加缺失类,若传入空list,则全部重置为缺省类,若传入list长度小于原category的Index,则未覆盖部分为缺省类,若传入list长度大于原category的Index,则多出部分为未使用类别
df["grade"]=df["grade"].cat.set_categories(["very bad","bad","medium","good","very good"])
df['grade']=df['grade'].cat.set_categories(["very bad","bad","medium","good","very good"], ordered=True)

# Series.cat.rename_categories重命名类别,可传入与原category Index长度相同的列表,也可传入与category对应的字典
df['grade'] = df['grade'].cat.rename_categories([f'new_{i}' for i in df['grade'].cat.categories])
df['grade'] = df['grade'].cat.rename_categories({'a1':'new_a1', 'b1':'new_b1', 'c1':'new_c1'})

# Series.cat.as_ordered将一个类别序列按照当前排序转换为有序序列
df['grade'] = df['grade'].cat.as_ordered()

# Series.cat.as_unordered将一个有序序列转换为无序序列
df['grade'] = df['grade'].cat.as_unordered()

# Series.cat.reorder_categories重新排序类别序列,传入的列表必需与原类别集合一致
df['grade'] = df['grade'].cat.reorder_categories(['a', 'e', 'b'], ordered=True)
df.sort_values(['grade'], ascending=False)

# 类别类型的优势在于排序,可以防止按照词汇排序
df.sort_values(by='grade')

#  按照类别分组groupby,即使类别为空,也会显示
df.groupby('grade').size()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼摆摆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值