【pandas小技巧】--列值的映射
映射列值是指将一个列中的某些特定值映射为另外一些值,常用于数据清洗和转换。使用映射列值的场景有很多,以下是几种常见的场景:
[*]将字符串类型的列中的某些值映射为数字。例如,将“男”和“女”分别映射为 0 和 1,以便进行机器学习算法的训练和预测。
[*]将缩写替换为全称。例如,将“USA”和“UK”分别替换为“美国”和“英国”,使得数据更加易读。
[*]将错误拼写的单词替换为正确的单词。例如,将“Cocacola”替换为“Coca-Cola”,以避免错误的统计和分析。
本篇介绍几个常用的映射小技巧。
1. map 映射
map映射是最简单也是最直接的,比如下面的示例,将性别映射成0和1。
import pandas as pd
df = pd.DataFrame({
"name": ["Lily", "Harry",
"Annie", "Joe","Tom"],
"sex": ["female", "male",
"female", "male","male"],
"grade":["A", "E", "B", "F", "A"],
})
df.sex = df.sex.map({
"female": 0,
"male": 1,
})
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1684167165353-aa9e052b-053f-461c-bcd4-2c67b86243d0.png#averageHue=%23f0ebea&clientId=uf60c2651-3732-4&from=paste&height=248&id=u2bf9f76d&originHeight=248&originWidth=542&originalType=binary&ratio=1&rotation=0&showTitle=false&size=33732&status=done&style=stroke&taskId=u48401bf3-a680-45b2-98f3-99f021f0cfe&title=&width=542
2. factorize 映射
用map函数映射列的值是最直观的方式,不过如果列的值种类比较多的时候,一个一个映射比较麻烦。
比如下面示例中的 grade 列,不像 sex 列只有两种值。
这时,可以用 factorize 方法来映射。
df = pd.DataFrame({
"name": ["Lily", "Harry",
"Annie", "Joe","Tom"],
"sex": ["female", "male",
"female", "male","male"],
"grade":["A", "E", "B", "F", "A"],
})
df.sex = df.sex.factorize()
df.grade = df.grade.factorize()
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1684167873479-30e5fb55-b315-4dcc-9982-5b81ecf89597.png#averageHue=%23efe9e9&clientId=uf60c2651-3732-4&from=paste&height=241&id=u559d8297&originHeight=241&originWidth=529&originalType=binary&ratio=1&rotation=0&showTitle=false&size=34783&status=done&style=stroke&taskId=u6efd86b6-25e5-4884-bfbd-e62679f2002&title=&width=529
factorize函数返回的是一个二元元组,第一个元素是映射之后的数字数组,
第二个元素是索引类型,索引的值就是列中各个不同的值。
df.grade.factorize()https://cdn.nlark.com/yuque/0/2023/png/2235414/1684168076809-334272d1-f8d7-40b6-b254-673efb95c852.png#averageHue=%23ebebeb&clientId=uf60c2651-3732-4&from=paste&height=63&id=u6e1c0747&originHeight=63&originWidth=457&originalType=binary&ratio=1&rotation=0&showTitle=false&size=9990&status=done&style=stroke&taskId=ucf0b1a2a-61f3-4f72-b4ed-1dc911f8576&title=&width=457
所以代码中用的是 factorize()。
这里还有一个小技巧,如果映射后想把得到的值二元化,
比如上面的 grade 列,映射之后有4种不同的值,代表不同的成绩等级。
如果我们只想要不及格(F)和及格(非F)两种情况,那么
df.grade = df.grade.factorize()
df.grade = (df.grade == 3).astype("int")
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1684168397582-7f6d2850-71f2-4fc9-adb3-91281e5717f7.png#averageHue=%23efe9e9&clientId=uf60c2651-3732-4&from=paste&height=243&id=u369908e3&originHeight=243&originWidth=553&originalType=binary&ratio=1&rotation=0&showTitle=false&size=38487&status=done&style=stroke&taskId=ud43be3e6-222d-4b76-8801-c14de8b7d84&title=&width=553
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]