python中factor函数_Python之Category对比R之factor

Python和R中表示类别的数据类型分别是Category和factor,两者的用法十分相似。本文对两者的用法做一简单对比。

Python-Category

import pandas as pdnames = ['Carrie','Dailey','Mack','Sally','James','Pansy', 'Wall', 'Kaley', 'Kate', 'Tanya']teams = ['West', 'West', 'East', 'West', 'East', 'East', 'West', 'West', 'East', 'East']scores = [98, 87, 43, 61, 26, 51, 73, 90, 69, 82]df = pd.DataFrame({'name': names, 'team': teams, 'score': scores})

# 显示创建Category

# 无序的pd.Categorical(teams, categories=['East', 'West'])# 有序的pd.Categorical(teams, categories=['East', 'West'], ordered=True)pd.Categorical(teams, categories=['East', 'West', 'South'], ordered=True)

#.astype方法转换成category

df['team'] = df['team'].astype('category')

# pd.cut切分后转换成有序category

score_ranges = [0, 60, 90, 101]score_labels = ['不及格', '中等', '优秀']df['level'] = pd.cut(df['score'], bins=score_ranges, labels=score_labels, right=False)

#.cat.rename_categories 重命名类别标签

# 显示设置原名称和新名称一一对应df['level'].cat.rename_categories({'不及格': 'very bad', '中等': 'medium', '优秀': 'very good'})# 或不显示原名称,但顺序要注意对齐df['level'].cat.rename_categories(['very bad', 'medium', 'very good'])

#.cat.categories 赋值

# 给categories赋值,可以改变类别标签。要注意赋值的时候是按照顺序进行对应的。同cat.rename_categories效果df[df['level'].cat.categories = ['very bad', 'medium', 'very good']

#.cat.reorder_categories 设置类别顺序、设置有序或无序

df['level'].cat.reorder_categories(['very good', 'very bad', 'medium'])df['level'].cat.reorder_categories(['very good', 'very bad', 'medium'], ordered=False)

#.cat.as_unordered() 有序转成无序

df['level'] = df['level'].cat.as_unordered()

#.cat.as_ordered() 无序转成有序

df['level'] = df['level'].cat.as_ordered()

#.cat.set_categories 设置类别顺序、设置有序或无序、改变类别标签集合

# 设置类别顺序、设置有序或无序 同.cat.reorder_categoriesdf['level'].cat.set_categories(['very good', 'very bad', 'medium'])df['level'].cat.set_categories(['very good', 'very bad', 'medium'], ordered=False)# 改变类别标签集合df['level'] = df['level'].cat.set_categories(['very bad', 'bad', 'medium', 'good', 'very good'])

#.cat.add_categories 添加类别

df['level'] = df['level'].cat.add_categories(['brilliant'])

#.cat.remove_categories 删除类别

df['level'] = df['level'].cat.remove_categories(['brilliant'])

#.cat.remove_unused_categories() 删除无用的类别

df['level'].cat.remove_unused_categories()

R-factor

names

#转换成因子

df$team = factor(df$team)

#cut函数切分连续变量为因子

score_ranges

#重命名因子水平

# 显示设置原名称和新名称一一对应factor(df$level, levels=c('不及格', '中等', '优秀'), labels=c('very bad', 'medium','very good'))# 或不显示原名称,但顺序要注意对齐df$level = factor(df$level, labels=c('very bad', 'medium','very good'))

#设置因子水平顺序

factor(df$level, levels=c('very good', 'very bad', 'medium'))

#有序转成无序

df$level 

#无序转成有序

df$level 

#改变因子水平的集合

factor(df$level, levels=c('very bad', 'bad', 'medium', 'good', 'very good'))

结语

通过上面的比较,我们发现Python中的Category和R中的factor的用法和功能基本一致。其实不仅该点相似,两种语言的很多地方都有相通点,且在发展的过程中,两者多有相互借鉴之处。所以,我们在选择工具的时候,首先要根据自己的实际情况选择其中一种深度使用,即能够使用其中一种来解决实际工作中的分析、建模等各种问题。然后如果有需要,再学另一种,会发现如果深度使用过其中一种,再迁移到另一种是很快的事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值