理解pandas中的apply和map的作用和异同

寒假工作坊

Python&Stata数据分析课寒假工作坊

现在开始招生了,有兴趣的同学和老师可以戳进来了解

课程安排 

1月9-10日  Python爬虫&文本数据分析(模块)    

1月11-16日  Stata 应用能力提升与实证前沿(模块Ⅱ)  

地点

浙江 · 杭州(浙江工商大学)

  

pandas中的数据类型

我们可以将pandas中的数据简单的认为只有下面这两种

  • 一维Series

  • 二维DataFrame

这两种数据类型都有map和apply方法

  • Series: apply和map

  • DataFrame: apply

Series.map

Series.map(arg)

  • 传入的arg : 操作函数、字典或Series

  • 返回Series

import pandas as pd
import numpy as np
s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])
print(type(s))
s
<class 'pandas.core.series.Series'>
0       cat
1       dog
2       NaN
3    rabbit
dtype: object
s.map({'cat':'kitten',
       'dog':'puppy'})
0    kitten
1     puppy
2       NaN
3       NaN
dtype: object

Series.apply

Series.apply(func, args, **kwds)

  • func : 函数、字典或Series

  • args: func函数的顺序参数, 元组类型

  • kwds: func函数的关键词参数,字典类型

  • 返回Series或DataFrame

import pandas as pd
s = pd.Series([20, 21, 12],
              index=['London', 'New York', 'Helsinki'])
s
London      20
New York    21
Helsinki    12
dtype: int64
操作函数只有一个输入,一个输出
import pandas as pd
s = pd.Series([20, 21, 12],
              index=['London', 'New York', 'Helsinki'])
def func1(x):
    return x**2
s.apply(func1)
London      400
New York    441
Helsinki    144
dtype: int64

我们定义的操作函数,其输入和输出都是一个元素。这时候series.map和series.apply功效相同。

我们再看看操作函数输入一个,输出series(相当于多个元素)时,series的map和apply是否有区别

import pandas as pd
s = pd.Series([20, 21, 12],
              index=['London', 'New York', 'Helsinki'])
def func2(x):
    return pd.Series([x, x])
s.map(func2)
London      0    20
1    20
dtype: int64
New York    0    21
1    21
dtype: int64
Helsinki    0    12
1    12
dtype: int64
dtype: object
import pandas as pd
s = pd.Series([20, 21, 12],
              index=['London', 'New York', 'Helsinki'])
def func3(x):
    return pd.Series([x, x])
s.apply(func3)

01
London2020
New York2121
Helsinki1212

DataFrame.apply()

apply(func, axis=0, args, kwds)

  • func: 操作函数

  • axis: 操作的方向,默认列方向axis=0。行方向操作axis=1

  • args: func的顺序参数,元组数据类型

  • kwds: func的关键词参数,字典数据类型

import pandas as pd
df = pd.DataFrame([[4, 9], [3, 2], [5, 7]], 
                  columns=['a', 'b'])
df

ab
049
132
257
def func4(row):
    return row[0]+row[1]
df.apply(func4, axis=1)
0    13
1     5
2    12
dtype: int64
def func5(x):
    return x+1
df.apply(func5, axis=1)

ab
0510
143
268
df.apply(lambda x: x.max()+x.min())
a     8
b    11
dtype: int64
df.apply(lambda x: x.max()+x.min(), axis=1)
0    13
1     5
2    12
dtype: int64

近期文章

精选课 | Python网络爬虫与文本数据分析(学术)

用statsmodels库做计量分析

NRC词语情绪词典和词语色彩词典

Loughran&McDonald金融文本情感分析库

股评师分析报告文本情感分析预测股价

使用分析师报告中含有的情感信息预测上市公司股价变动

【公开视频课】Python语法快速入门

【公开视频课】Python爬虫快速入门

一行pandas代码生成哑变量

使用Python读取图片中的文本数据

代码不到40行的超燃动态排序图

情绪及色彩词典获取方式,请在公众号后台回复关键词“20191218” ,

如果想做文本分析

可购买网课 | Python文本数据分析实战(学术) 

或参加Python&Stata数据分析课寒假工作坊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值