Pandas 十八:数据转换函数map、apply、applymap

数据转换函数对比: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	阿里巴巴	阿里巴巴	阿里巴巴	阿里巴巴
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pandas中的applymapapplymap都是用于对DataFrame或Series中的数据进行函数应用的方法,它们的具体使用方式和作用略有不同。 1. apply方法 apply方法是用于对DataFrame或Series的行或列执行函数操作的方法。可以通过传递axis参数来指定是对行还是列进行操作,默认是对列进行操作。apply方法接受一个函数作为参数,并将该函数应用到DataFrame或Series的每一个元素上,然后将结果组合成一个新的DataFrame或Series。 示例: ``` import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) def add_one(x): return x + 1 # 对每一列执行add_one函数 df.apply(add_one) # 对每一行执行add_one函数 df.apply(add_one, axis=1) ``` 2. map方法 map方法是用于对Series中的每一个元素执行函数操作的方法。它接受一个函数作为参数,并将该函数应用到Series的每一个元素上,然后将结果组合成一个新的Series。 示例: ``` import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) def add_one(x): return x + 1 # 对Series A 中的每一个元素执行add_one函数 df['A'].map(add_one) ``` 3. applymap方法 applymap方法是用于对DataFrame中的每一个元素执行函数操作的方法。它接受一个函数作为参数,并将该函数应用到DataFrame的每一个元素上,然后将结果组合成一个新的DataFrame。 示例: ``` import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) def add_one(x): return x + 1 # 对DataFrame中的每一个元素执行add_one函数 df.applymap(add_one) ``` 总结: apply方法适用于对DataFrame或Series的行或列执行函数操作;map方法适用于对Series中的每一个元素执行函数操作;applymap方法适用于对DataFrame中的每一个元素执行函数操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值