我是靠谱客的博主 仁爱中心,最近开发中收集的这篇文章主要介绍Pandas 十八:数据转换函数map、apply、applymap,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部