- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我们比较所有在所有情况下都有效的方法
初始数据帧:
arr = np.random.randint(10, 50, size=(1000, 1000))
df = pd.DataFrame(arr)
申请:
%%timeit
df.apply(lambda x: x**3)
329 ms ± 117 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
转变:
%%timeit
df.transform(lambda x: x**3)
352 ms ± 48 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Applymap(非常糟糕):
%%timeit
df.applymap(lambda x: x**3)
1.07 s ± 59.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Applymap
是最不灵活和最慢的,那么为什么它存在呢?
最佳答案
这里只是一个注释。 transform
和 apply
正在处理数据帧列,而 df.applymap
按元素处理。因此对于其他问题applymap
将是唯一基于 Pandas 的解决方案。
执行applymap
实际上是 apply(lambda x: x.map(func))
.
不完全是,因为 Pandas 在模块中使用私有(private)方法。
计时结果来自 applymap
和 apply
与 map
是相似的:
>>> timeit(lambda: df.applymap(lambda x: x ** 2), number=10)
3.8224549000005936
>>> timeit(lambda: df.apply(lambda x: x.map(lambda y: y ** 2)), number=10)
4.243166700000074
>>>
更快的解决方案:
>>> timeit(lambda: df ** 2, number=10)
0.016250700000455254
>>>
但是对于常规情况,您需要逐元素应用,
np.vectorize
也是一个解决方案:
df[:] = np.vectorize(lambda x: x ** 2)(df)
时间(无分配):
>>> timeit(lambda: np.vectorize(lambda x: x ** 2)(df), number=10)
2.313548300000548
>>>
只有
applymap
的示例会工作,但是
apply
和
transform
不会:
>>> df.applymap(lambda x: chr(x // 100))
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 986 987 988 989 990 991 992 993 994 995 996 997 998 999
0 ـ ⹓ 禌 㪞 ག Ǻ 䤵 ʏ 콜 ̓ 鉨 ␓ ᓂ ... ̓ ૮ ␓ Ï Ǻ 搀 䤵 ᮠ Й Й ޘ Ï ૮ 薌
1 ʏ 婞 Й 뺜 薌 ـ ᾤ ᾤ ĝ ⣵ ... 婞 ␓ 关 ⣵ 콜 ĝ ૮ 关 䤵 ᠂ ૮
2 婞 婞 ૮ 䆜 ᾤ 뺜 Ǻ 㐳 ᇙ Й Ǻ 콜 ⹓ ĝ ... Ï 禌 ૮ ૮ ག ƀ 콜 ⹓ 湡 ޘ Ï 㪞 禌
3 ⣵ ᇙ ␓ 뺜 Ï Ï 鉨 㪞 콜 ꀮ 뺜 禌 ... 薌 ⣵ 湡 婞 婞 㐳 Ǻ ᇙ d d ـ 鉨 ᓂ
4 द ޘ ⹓ ƀ 薌 ԗ ག ԗ ૮ ԗ ᮠ ꀮ 䆜 ... ޘ ᇙ 㐳 ʏ ᮠ ⹓ 搀 d 婞 ԗ 禌 Й 콜 ʏ
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ... .. .. .. .. .. .. .. .. .. .. .. .. .. ..
995 Ǻ ĝ 껦 禌 ĝ 搀 ƀ 薌 ᇙ ĝ 뺜 ᾤ ૮ ᇙ ... 䤵 द ૮ द ꀮ 婞 䤵 ĝ ␓ 薌 ␓ ƀ ̓ 鉨
996 婞 ૮ Й 薌 ـ ག 湡 䤵 ␓ 뺜 ␓ ޘ 婞 ꀮ ... 뺜 ⣵ 䤵 뺜 ⹓ ĝ 薌 ̓ d
997 䤵 Ï ƀ Й ƀ 䤵 ƀ ᓂ ⣵ ᮠ 䤵 ૮ ... 䤵 Й Ï द 鉨 㪞 ⹓ ␓ 关 Ǻ ĝ ᇙ द
998 ʏ ⹓ d द d 㪞 ꀮ d 薌 薌 ᠂ ƀ ̓ ... ᮠ ᓂ ĝ ག 䤵 㐳 ʏ ⣵ 㐳 ʏ ᇙ 搀 ᓂ ̓
999 ޘ 䤵 Ǻ 껦 ̓ ԗ ĝ ƀ ꀮ 㐳 湡 搀 ⹓ ... ޘ 搀 䤵 湡 ૮ 鉨 ޘ Ï 㐳 ƀ 禌 㪞 ـ
[1000 rows x 1000 columns]
>>> df.apply(lambda x: chr(x // 100))
TypeError: cannot convert the series to <class 'int'>
>>>
np.vectorize
也可以在这里工作:
>>> df[:] = np.vectorize(lambda x: chr(x // 100))(df)
>>> df
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 986 987 988 989 990 991 992 993 994 995 996 997 998 999
0 ـ ⹓ 禌 㪞 ག Ǻ 䤵 ʏ 콜 ̓ 鉨 ␓ ᓂ ... ̓ ૮ ␓ Ï Ǻ 搀 䤵 ᮠ Й Й ޘ Ï ૮ 薌
1 ʏ 婞 Й 뺜 薌 ـ ᾤ ᾤ ĝ ⣵ ... 婞 ␓ 关 ⣵ 콜 ĝ ૮ 关 䤵 ᠂ ૮
2 婞 婞 ૮ 䆜 ᾤ 뺜 Ǻ 㐳 ᇙ Й Ǻ 콜 ⹓ ĝ ... Ï 禌 ૮ ૮ ག ƀ 콜 ⹓ 湡 ޘ Ï 㪞 禌
3 ⣵ ᇙ ␓ 뺜 Ï Ï 鉨 㪞 콜 ꀮ 뺜 禌 ... 薌 ⣵ 湡 婞 婞 㐳 Ǻ ᇙ d d ـ 鉨 ᓂ
4 द ޘ ⹓ ƀ 薌 ԗ ག ԗ ૮ ԗ ᮠ ꀮ 䆜 ... ޘ ᇙ 㐳 ʏ ᮠ ⹓ 搀 d 婞 ԗ 禌 Й 콜 ʏ
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ... .. .. .. .. .. .. .. .. .. .. .. .. .. ..
995 Ǻ ĝ 껦 禌 ĝ 搀 ƀ 薌 ᇙ ĝ 뺜 ᾤ ૮ ᇙ ... 䤵 द ૮ द ꀮ 婞 䤵 ĝ ␓ 薌 ␓ ƀ ̓ 鉨
996 婞 ૮ Й 薌 ـ ག 湡 䤵 ␓ 뺜 ␓ ޘ 婞 ꀮ ... 뺜 ⣵ 䤵 뺜 ⹓ ĝ 薌 ̓ d
997 䤵 Ï ƀ Й ƀ 䤵 ƀ ᓂ ⣵ ᮠ 䤵 ૮ ... 䤵 Й Ï द 鉨 㪞 ⹓ ␓ 关 Ǻ ĝ ᇙ द
998 ʏ ⹓ d द d 㪞 ꀮ d 薌 薌 ᠂ ƀ ̓ ... ᮠ ᓂ ĝ ག 䤵 㐳 ʏ ⣵ 㐳 ʏ ᇙ 搀 ᓂ ̓
999 ޘ 䤵 Ǻ 껦 ̓ ԗ ĝ ƀ ꀮ 㐳 湡 搀 ⹓ ... ޘ 搀 䤵 湡 ૮ 鉨 ޘ Ï 㐳 ƀ 禌 㪞 ـ
[1000 rows x 1000 columns]
>>>
关于python - 如果applymap 这么慢,我们为什么要使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69604900/
1.apply() 当想让方程作用在一维的向量上时,可以使用apply来完成,如下所示 ?
我正在尝试对我的数据集使用 applymap 以将浮点数创建为整数。但是我收到“'Series' 对象没有属性'applymap'”错误。 import pandas as pd import mat
我有一个数据帧,我希望在其中使用第一个即将到来的行来回填所有 NaN 值。我现在的代码是这样的: df[df.applymap(np.isfinite).all(1)] 当我将数据帧减少到 7 列或更
我有 2 个数据框 >>> x 0 1 2 3 0 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 >>> y 0 1
我正在使用 df.to_excel()将数据从 pandas 数据框输出到 Excel。为了提高可读性,我使用 df.style.applymap()根据内容更改单元格的颜色。 想象一下,我有一个如下
我刚刚使用 pandas read_excel 将两个 excel 表加载到 2 个数据帧中。 是否可以使用基于行和列索引的数据框 B 的单元格数据在数据框 A 的单元格上应用映射? 下面是一个例子:
如果我想使用 pandas 更改数据框中的变量名称,我可以不使用 pandas.df.rename() 函数而是使用 applymap() 来更改名称吗例如 Registrar Enrolment
这个问题在这里已经有了答案: How to use Pandas stylers for coloring an entire row based on a given column? (3 个答案
我想在下面的数据集中使用带有一点复杂函数的 applymap 方法。 value1 value2 value3 value4 value5 people 147 119 69
我想做一个简单的操作,将数据框转换为标题。 有一些 NaN 会导致错误,所以我想通过仅在 not null 时应用 str.title() 来避免它们。 但是我收到了无效语法。 df= df.appl
我想尝试 Pandas DataFrame 对象的 applymap 方法的功能。这是用例: 假设我的 DataFrame df1 如下: Age ID Name 0 27 10
我正在尝试比较一个字符串列表的相似性,并在 pandas 数据框中获取结果以供检查;所以我使用一个列表作为索引,另一个作为列列表。然后我想计算它们的“Levenshtein 相似度”(一个比较两个词之
基础 以下操作基于python 3.6 windows 10 环境下 通过 将通过实例来演示三者的区别 toward_dict = {1: '东', 2: '南', 3: '西', 4:
我在数据框上应用了两个函数 res = df.apply(lambda x:pd.Series(list(x))) res = res.applymap(lambda x: x.strip('"')
我有一个 pandas 数据框,我正在使用自定义函数在所有元素上使用 applymap 清理数据,并将清理后的值存储在单独的列中。 tag0 tag1
我有一个分层数据集: df = pd.DataFrame(np.random.rand(6,6), columns=[['A','A','A','B','B','B'],
解决以下 Pandas 问题的最有效方法是什么? 这是一个简化的示例,其中包含数据框中的一些数据: import pandas as pd import numpy as np df = pd.Dat
我是 Pandas 新手。我编写了一个函数,我想将其应用于 pandas DataFrame“Monthly_mean_consump”中的所有条目,下面提供了数据示例。 Time 2010-0
假设我有一个 DataFrame: df = pd.DataFrame({'DATE_1':['2010-11-06', '2010-10-07', '2010-09-07', '2010-05-07
我有一个“年龄”列,但有时会显示 NaN 值。我知道我可以为此目的使用“fillna”,但我尝试定义自己的函数(并学习这样做)并将 applymap 用于数据框 到目前为止没有成功。 Age 69 4
我是一名优秀的程序员,十分优秀!