pandas
python
性别
看过来
《pandas 教程》 持续更新中,可作为 pandas 入门进阶课程、pandas 中文手册、用法大全,配有案例讲解和速查手册。提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。查看更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《深入浅出Pandas:利用Python进行数据处理与分析》(ISBN:9787111685456)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
在数据整理过程中,将类别数据转为数字是常见的操作,比如我们经常会将性别中的男女用数字 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
'''
同样可以得到结果。这样我们就完成了需求。
(完)