在日常的数据处理中,经常会对一个DataFrame进行逐行、逐列和逐元素的操作。Pandas中的map、apply和applymap可以解决绝大部分这样的数据处理需求。
In [1]:
import numpy as np import pandas as pd
4.5.1 Series数据处理
1. map用法
- Series的map方法可以接受一个函数或含有映射关系的字典型对象,实现对应元素值转换。
In [2]:
#读取学生信息 st = pd.read_excel('data/stinfo.xlsx',index_col=0) st.head(3)
Out[2]:
姓名 | 学号 | 出生日期 | 年龄 | 籍贯 | 性别 | 身高 | 体重 | linux | python | 网络 | 数据库 | IT基础 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 甲一 | 50 | 2001年1月1日 | 19 | 福田 | 男 | 172 | 69 | 92 | 90 | 82 | NaN | 80 |
1 | 乙二 | 51 | 1999年2月2日 | 21 | 龙岗 | 男 | 180 | 77 | 95 | 88 | 85 | NaN | 80 |
2 | 丙三 | 52 | 2002年3月3日 | 18 | 南山 | 女 | 160 | 49 | 85 | 91 | 93 | NaN | 80 |
将性别的男女类别用1和0替换:
In [3]:
#使用字典进行映射 st["性别"] = st["性别"].map({"男":1, "女":0}) st.head(3)
Out[3]:
姓名 | 学号 | 出生日期 | 年龄 | 籍贯 | 性别 | 身高 | 体重 | linux | python | 网络 | 数据库 | IT基础 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 甲一 | 50 | 2001年1月1日 | 19 | 福田 | 1 | 172 | 69 | 92 | 90 | 82 | NaN | 80 |
1 | 乙二 | 51 | 1999年2月2日 | 21 | 龙岗 | 1 | 180 | 77 | 95 | 88 | 85 | NaN | 80 |
2 | 丙三 | 52 | 2002年3月3日 | 18 | 南山 | 0 | 160 | 49 | 85 | 91 | 93 | NaN | 80 |
将学号补全:
In [4]:
st['学号'] = st['学号'].map('20010203{}'.format) st.head(3)
Out[4]:
姓名 | 学号 | 出生日期 | 年龄 | 籍贯 | 性别 | 身高 | 体重 | linux | python | 网络 | 数据库 | IT基础 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 甲一 | 2001020350 | 2001年1月 |