概述
Pandas 十八:数据转换函数map、apply、applymap
- 1. map用于Series值的转换
- 方法1:Series.map(dict)
- 方法2:Series.map(function)
- 2. apply用于Series和DataFrame的转换
- 3. applymap用于DataFrame所有值的转换
数据转换函数对比:map、apply、applymap:
- map:只用于Series,实现每个值->值的映射;
- apply:用于Series实现每个值的处理,用于Dataframe实现某个轴的Series的处理;
- applymap:只能用于DataFrame,用于处理该DataFrame的每个元素;
1. map用于Series值的转换
实例:将股票代码英文转换成中文名字
Series.map(dict) or Series.map(function)均可
1
import pandas as pd
stocks = pd.read_excel('./datas/stocks/互联网公司股票.xlsx')
stocks.head()
1
日期 公司 收盘 开盘 高 低 交易量 涨跌幅
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00
2
stocks["公司"].unique()
2
array(['BIDU', 'BABA', 'IQ', 'JD'], dtype=object)
3
# 公司股票代码到中文的映射,注意这里是小写
dict_company_names = {
"bidu": "百度",
"baba": "阿里巴巴",
"iq": "爱奇艺",
"jd": "京东"
}
No output
方法1:Series.map(dict)
4
stocks["公司中文1"] = stocks["公司"].str.lower().map(dict_company_names)
No output
5
stocks.head()
5
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 公司中文1
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴
方法2:Series.map(function)
function的参数是Series的每个元素的值
6
stocks["公司中文2"] = stocks["公司"].map(lambda x : dict_company_names[x.lower()])
No output
7
stocks.head()
7
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 公司中文1 公司中文2
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度 百度
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度 百度
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度 百度
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴 阿里巴巴
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴 阿里巴巴
2. apply用于Series和DataFrame的转换
Series.apply(function), 函数的参数是每个值
DataFrame.apply(function), 函数的参数是Series
Series.apply(function)
function的参数是Series的每个值
8
stocks["公司中文3"] = stocks["公司"].apply(
lambda x : dict_company_names[x.lower()])
No output
9
stocks.head()
9
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 公司中文1 公司中文2 公司中文3
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度 百度 百度
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度 百度 百度
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度 百度 百度
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴 阿里巴巴 阿里巴巴
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴 阿里巴巴 阿里巴巴
DataFrame.apply(function)
function的参数是对应轴的Series
10
stocks["公司中文4"] = stocks.apply(
lambda x : dict_company_names[x["公司"].lower()],
axis=1)
No output
注意这个代码:
1、apply是在stocks这个DataFrame上调用;
2、lambda x的x是一个Series,因为指定了axis=1所以Seires的key是列名,可以用x[‘公司’]获取
11
stocks.head()
11
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 公司中文1 公司中文2 公司中文3 公司中文4
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度 百度 百度 百度
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度 百度 百度 百度
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度 百度 百度 百度
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴 阿里巴巴 阿里巴巴 阿里巴巴
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴 阿里巴巴 阿里巴巴 阿里巴巴
3. applymap用于DataFrame所有值的转换
12
sub_df = stocks[['收盘', '开盘', '高', '低', '交易量']]
No output
13
sub_df.head()
13
收盘 开盘 高 低 交易量
0 104.32 102.35 104.73 101.15 2.24
1 102.62 100.85 103.24 99.50 2.69
2 102.00 102.80 103.26 101.00 1.78
3 169.48 166.65 170.18 165.00 10.39
4 165.77 162.82 166.88 161.90 11.60
14
# 将这些数字取整数,应用于所有元素
sub_df.applymap(lambda x : int(x))
14
收盘 开盘 高 低 交易量
0 104 102 104 101 2
1 102 100 103 99 2
2 102 102 103 101 1
3 169 166 170 165 10
4 165 162 166 161 11
5 165 168 168 163 14
6 16 15 16 15 10
7 15 15 15 15 8
8 15 16 16 15 11
9 28 28 28 27 8
10 28 28 28 27 9
11 28 28 28 27 10
15
# 直接修改原df的这几列
stocks.loc[:, ['收盘', '开盘', '高', '低', '交易量']] = sub_df.applymap(lambda x : int(x))
No output
16
stocks.head()
16
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 公司中文1 公司中文2 公司中文3 公司中文4
0 2019-10-03 BIDU 104 102 104 101 2 0.02 百度 百度 百度 百度
1 2019-10-02 BIDU 102 100 103 99 2 0.01 百度 百度 百度 百度
2 2019-10-01 BIDU 102 102 103 101 1 -0.01 百度 百度 百度 百度
3 2019-10-03 BABA 169 166 170 165 10 0.02 阿里巴巴 阿里巴巴 阿里巴巴 阿里巴巴
4 2019-10-02 BABA 165 162 166 161 11 0.00 阿里巴巴 阿里巴巴 阿里巴巴 阿里巴巴
最后
以上就是仁爱中心为你收集整理的Pandas 十八:数据转换函数map、apply、applymap的全部内容,希望文章能够帮你解决Pandas 十八:数据转换函数map、apply、applymap所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复