首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas中map、applymap和应用方法的区别

Pandas中map、applymap和应用方法的区别
EN

Stack Overflow用户
提问于 2013-11-05 20:20:14
回答 11查看 465.9K关注 0票数 659

你能告诉我什么时候使用这些矢量化方法和基本例子吗?

我看到map是一个Series方法,而其余的是DataFrame方法。不过,我对applyapplymap方法感到困惑。为什么我们有两种将函数应用于DataFrame的方法?再次,简单的例子,说明使用将是很棒的!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2019-05-25 01:26:05

比较mapapplymapapply:上下文问题

第一个主要区别:DEFINITION

  • map仅在系列上定义
  • applymap仅在DataFrames上定义
  • apply是在这两个

第二大区别:输入参数

  • map接受dicts、Series或可调用的
  • applymapapply只接受可调用的

第三大区别:行为

  • map是系列的元素级
  • applymap是DataFrames的元素级
  • apply也在元素上工作,但适合于更复杂的操作和聚合。行为和返回值取决于函数。

第四大区别(最重要的):用例

  • map是为了将值从一个域映射到另一个域,因此对性能进行了优化(例如,df['A'].map({1:'a', 2:'b', 3:'c'}))。
  • applymap有利于跨多个行/列(例如,df[['A', 'B', 'C']].applymap(str.strip))的元素级转换。
  • apply用于应用任何不能矢量化的函数(例如,df['sentences'].apply(nltk.sent_tokenize))。

另外,请参阅什么时候我应该(不)想使用熊猫在我的代码中应用()?中我刚才所做的关于使用apply的最合适的场景(注意并不多,但有一些-应用通常比较慢)。

小结

脚注

  1. map在传递字典/系列时,将根据该字典/系列中的键映射元素。缺失的值将作为NaN记录在输出中。
  2. 最近版本的applymap已经为一些操作进行了优化。在某些情况下,您会发现applymap略快于apply。我的建议是测试两者,并使用任何更好的工作。
  3. map进行了元素映射和转换的优化。涉及字典或系列的操作将使熊猫能够使用更快的代码路径以获得更好的性能。
  4. Series.apply返回用于聚合操作的标量,否则为Series。同样适用于DataFrame.apply。请注意,apply在使用某些NumPy函数(如meansum等)调用时也具有快速路径。
票数 290
EN

Stack Overflow用户

发布于 2013-11-05 20:40:33

apply在DataFrame的行/列基础上工作

applymap在DataFrame上按元素工作

map在系列中按元素工作

直接取自韦斯·麦金尼( Wes )的用于数据分析的Python书,pg。132 (我强烈推荐这本书):

另一个常见的操作是将一维数组上的函数应用于每列或每一行。DataFrame的apply方法正是这样做的:

代码语言:javascript
运行
复制
In [116]: frame = DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])

In [117]: frame
Out[117]: 
               b         d         e
Utah   -0.029638  1.081563  1.280300
Ohio    0.647747  0.831136 -1.549481
Texas   0.513416 -0.884417  0.195343
Oregon -0.485454 -0.477388 -0.309548

In [118]: f = lambda x: x.max() - x.min()

In [119]: frame.apply(f)
Out[119]: 
b    1.133201
d    1.965980
e    2.829781
dtype: float64

许多最常见的数组统计数据(如求和和平均值)都是DataFrame方法,因此不必使用apply。也可以使用元素级Python函数。假设您希望从帧中的每个浮点值计算一个格式化的字符串。您可以使用applymap完成此操作:

代码语言:javascript
运行
复制
In [120]: format = lambda x: '%.2f' % x

In [121]: frame.applymap(format)
Out[121]: 
            b      d      e
Utah    -0.03   1.08   1.28
Ohio     0.65   0.83  -1.55
Texas    0.51  -0.88   0.20
Oregon  -0.49  -0.48  -0.31

名称applymap的原因是,Series有一个map方法,用于应用按元素划分的函数:

代码语言:javascript
运行
复制
In [122]: frame['e'].map(format)
Out[122]: 
Utah       1.28
Ohio      -1.55
Texas      0.20
Oregon    -0.31
Name: e, dtype: object
票数 683
EN

Stack Overflow用户

发布于 2016-08-11 15:20:32

快速总结

  • DataFrame.apply一次对整个行或列进行操作。
  • DataFrame.applymapSeries.applySeries.map同时对一个元素进行操作。

Series.applySeries.map是相似的,而且经常是可互换的。在下面的osa的回答中讨论了它们之间的一些细微差别。

票数 93
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19798153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档