你能告诉我什么时候使用这些矢量化方法和基本的例子吗?
我看到map是一个系列方法,而其余的是DataFrame方法。我对apply和applymap方法感到困惑。为什么我们有两个方法来应用一个函数到一个数据帧?再一次,简单的例子说明用法将是伟大的!
你能告诉我什么时候使用这些矢量化方法和基本的例子吗?
我看到map是一个系列方法,而其余的是DataFrame方法。我对apply和applymap方法感到困惑。为什么我们有两个方法来应用一个函数到一个数据帧?再一次,简单的例子说明用法将是伟大的!
当前回答
比较map, applymap和apply: Context Matters
第一个主要区别:定义
map在Series ONLY上定义 applymap只在DataFrames上定义 apply定义在BOTH上
第二个主要区别:INPUT参数
map接受字典、系列或可调用 Applymap和apply只接受可调用对象
第三个主要区别:行为
map是系列的元素 applymap是DataFrames的elementwise Apply也适用于elementwise,但适用于更复杂的操作和聚合。行为和返回值取决于函数。
第四个主要区别(最重要的一个):用例
map用于将值从一个域映射到另一个域,因此对性能进行了优化(例如,df['A']。Map ({1:'a', 2:'b', 3:'c'})) applymap适用于跨多行/列的elementwise转换(例如df[['A', 'B', 'C']]].applymap(str.strip)) Apply用于应用任何不能向量化的函数(例如df['sentence ']. Apply (nltk.sent_tokenize))。
另见什么时候我应该(不)想要在我的代码中使用熊猫apply() ?我写了一篇关于使用apply最合适的场景的文章(注意不是很多,但是有一些——apply通常很慢)。
总结
Footnotes map when passed a dictionary/Series will map elements based on the keys in that dictionary/Series. Missing values will be recorded as NaN in the output. applymap in more recent versions has been optimised for some operations. You will find applymap slightly faster than apply in some cases. My suggestion is to test them both and use whatever works better. map is optimised for elementwise mappings and transformation. Operations that involve dictionaries or Series will enable pandas to use faster code paths for better performance. Series.apply returns a scalar for aggregating operations, Series otherwise. Similarly for DataFrame.apply. Note that apply also has fastpaths when called with certain NumPy functions such as mean, sum, etc.
其他回答
apply和applymap之间的区别可能是最简单的解释:
Apply将整个列作为参数,然后将结果分配给该列
Applymap将单独的单元格值作为参数,并将结果分配回该单元格。
注意:如果apply返回单个值,你将得到这个值而不是赋值后的列,最终将只有一行而不是矩阵。
我只是想指出一点,我在这方面有过一些挣扎
def f(x):
if x < 0:
x = 0
elif x > 100000:
x = 100000
return x
df.applymap(f)
df.describe()
这不会修改数据帧本身,必须重新分配:
df = df.applymap(f)
df.describe()
比较map, applymap和apply: Context Matters
第一个主要区别:定义
map在Series ONLY上定义 applymap只在DataFrames上定义 apply定义在BOTH上
第二个主要区别:INPUT参数
map接受字典、系列或可调用 Applymap和apply只接受可调用对象
第三个主要区别:行为
map是系列的元素 applymap是DataFrames的elementwise Apply也适用于elementwise,但适用于更复杂的操作和聚合。行为和返回值取决于函数。
第四个主要区别(最重要的一个):用例
map用于将值从一个域映射到另一个域,因此对性能进行了优化(例如,df['A']。Map ({1:'a', 2:'b', 3:'c'})) applymap适用于跨多行/列的elementwise转换(例如df[['A', 'B', 'C']]].applymap(str.strip)) Apply用于应用任何不能向量化的函数(例如df['sentence ']. Apply (nltk.sent_tokenize))。
另见什么时候我应该(不)想要在我的代码中使用熊猫apply() ?我写了一篇关于使用apply最合适的场景的文章(注意不是很多,但是有一些——apply通常很慢)。
总结
Footnotes map when passed a dictionary/Series will map elements based on the keys in that dictionary/Series. Missing values will be recorded as NaN in the output. applymap in more recent versions has been optimised for some operations. You will find applymap slightly faster than apply in some cases. My suggestion is to test them both and use whatever works better. map is optimised for elementwise mappings and transformation. Operations that involve dictionaries or Series will enable pandas to use faster code paths for better performance. Series.apply returns a scalar for aggregating operations, Series otherwise. Similarly for DataFrame.apply. Note that apply also has fastpaths when called with certain NumPy functions such as mean, sum, etc.
快速的总结
DataFrame。Apply一次操作整个行或列。 DataFrame。applymap系列。apply和Series。Map操作1 元素。
系列。应用和系列。地图是相似的,经常可以互换。下面osa的回答中讨论了他们之间的一些细微差异。
我的理解:
从功能上看:
如果函数具有需要在列/行内进行比较的变量,请使用 适用。
例如:lambda x: x.max()-x.mean()。
如果将函数应用于每个元素:
1>如果已定位某列/行,使用apply
2>如果应用于整个数据帧,使用applymap
majority = lambda x : x > 17
df2['legal_drinker'] = df2['age'].apply(majority)
def times10(x):
if type(x) is int:
x *= 10
return x
df2.applymap(times10)