看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据整理过程中,将类别数据转为数字是常见的操作,比如我们经常会将性别中的男女用数字 1 和 0 来表示,这样会提高数据的计算和存储效率。在本例中我们就来完成这个操作。
以下为我们的原始数据集。gender 为性别列,需要将男女用 1 和 0 来替代。
import pandas as pd
df = pd.DataFrame({'name': ['Tom', 'Lily', 'Lucy'],
'gender': ['男', '女', '女']
})
df
'''
name gender
0 Tom 男
1 Lily 女
2 Lucy 女
'''
有两种思路,一种是将性别列向量化判断是否与「男」值相等,如果相等则返回 True,否则返回 False,形成一个序列,再将这个序列转为整型,其中 True 为替换为 1,False 为替换为 0。
另外一种方法是利用 Series 的 map() 方法进行映射。
向量化判断性别列是否为「男」,返回一个布尔序列:
df.gender=='男'
'''
0 True
1 False
2 False
Name: gender, dtype: bool
'''
然后将这个布尔序列转为整型:
(df.gender=='男').astype(int)
'''
0 1
1 0
2 0
Name: gender, dtype: int64
'''
值相等对比也可以用 eq() 方法来进行对比,最后指定一个同名的新列:
df.gender.eq('男').astype(int)
'''
0 1
1 0
2 0
Name: gender, dtype: int64
'''
df.assign(gender=df.gender.eq('男').astype(int))
'''
name gender
0 Tom 1
1 Lily 0
2 Lucy 0
'''
最终得了想要的结果。
第二种方法是用 map() 方法来映射:
df.gender.map({'男':1, '女': 0})
'''
0 1
1 0
2 0
Name: gender, dtype: int64
'''
还有种是用替换的方法:
df.replace({'男': '1', '女': '0'})
# 由于 2.2后开始提示将来不支持向下类型转换
# FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version.
# 你可以这样
df.replace({'男':'1','女':'0'}).astype({'gender': int})
同样可以得到结果。这样我们就完成了需求。
(完)
更新时间:2024-08-18 16:11:43 标签:pandas python 性别