【pandas小技巧】--列值的映射

耶耶耶耶耶  金牌会员 | 2023-8-10 12:46:51 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 883|帖子 883|积分 2649

映射列值是指将一个列中的某些特定值映射为另外一些值,常用于数据清洗和转换。
使用映射列值的场景有很多,以下是几种常见的场景:

  • 将字符串类型的列中的某些值映射为数字。例如,将“男”和“女”分别映射为 0 和 1,以便进行机器学习算法的训练和预测。
  • 将缩写替换为全称。例如,将“USA”和“UK”分别替换为“美国”和“英国”,使得数据更加易读。
  • 将错误拼写的单词替换为正确的单词。例如,将“Cocacola”替换为“Coca-Cola”,以避免错误的统计和分析。
本篇介绍几个常用的映射小技巧。
1. map 映射

map映射是最简单也是最直接的,比如下面的示例,将性别映射成0和1。
  1. import pandas as pd
  2. df = pd.DataFrame({
  3.     "name": ["Lily", "Harry",
  4.              "Annie", "Joe","Tom"],
  5.     "sex": ["female", "male",
  6.             "female", "male","male"],
  7.     "grade":["A", "E", "B", "F", "A"],
  8. })
  9. df.sex = df.sex.map({
  10.     "female": 0,
  11.     "male": 1,
  12. })
  13. df
复制代码

2. factorize 映射

用map函数映射列的值是最直观的方式,不过如果列的值种类比较多的时候,一个一个映射比较麻烦。
比如下面示例中的 grade 列,不像 sex 列只有两种值。
这时,可以用 factorize 方法来映射。
  1. df = pd.DataFrame({
  2.     "name": ["Lily", "Harry",
  3.              "Annie", "Joe","Tom"],
  4.     "sex": ["female", "male",
  5.             "female", "male","male"],
  6.     "grade":["A", "E", "B", "F", "A"],
  7. })
  8. df.sex = df.sex.factorize()[0]
  9. df.grade = df.grade.factorize()[0]
  10. df
复制代码

factorize函数返回的是一个二元元组,第一个元素是映射之后的数字数组,
第二个元素是索引类型,索引的值就是列中各个不同的值。
  1. df.grade.factorize()
复制代码

所以代码中用的是 factorize()[0]。
这里还有一个小技巧,如果映射后想把得到的值二元化,
比如上面的 grade 列,映射之后有4种不同的值,代表不同的成绩等级。
如果我们只想要不及格(F)和及格(非F)两种情况,那么
  1. df.grade = df.grade.factorize()[0]
  2. df.grade = (df.grade == 3).astype("int")
  3. df
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表