piR*_*red 27 python apply pandas
我在熊猫的DataFrame对象上使用apply方法.当我的DataFrame有一个列时,看起来应用函数被调用两次.问题是为什么?而且,我可以阻止这种行为吗?
码:
import pandas as pd
def mul2(x):
print 'hello'
return 2*x
df = pd.DataFrame({'a': [1,2,0.67,1.34]})
print df.apply(mul2)
Run Code Online (Sandbox Code Playgroud)
输出:
hello
hello
0 2.00
1 4.00
2 1.34
3 2.68
Run Code Online (Sandbox Code Playgroud)
我正在应用的函数中打印'hello'.我知道它被应用了两次因为'你好'打印了两次.更重要的是,如果我有两列,'你好'打印3次.更进一步的是当我打电话给'hello'列打印4次时.
码:
print df.a.apply(mul2)
Run Code Online (Sandbox Code Playgroud)
输出:
hello
hello
hello
hello
0 2.00
1 4.00
2 1.34
3 2.68
Name: a, dtype: float64
Run Code Online (Sandbox Code Playgroud)
cs9*_*s95 10
现在,apply和applymap对数据帧计算第一行/列只有一次。
最初,我们不得不GroupBy.apply和Series/df.apply两次评估第一组。第一组被评估两次的原因是因为 apply 想知道它是否可以“优化”计算(如果 apply 收到一个 numpy 或 cythonized 函数,有时这是可能的)。在 pandas 0.25 中,此行为已针对 GroupBy.apply 修复。现在,在 pandas 1.1 中,df.apply 也将修复此问题。
旧行为[pandas <= 1.0.X]
pd.__version__
# '1.0.4'
df.apply(mul2)
hello
hello
a
0 2.00
1 4.00
2 1.34
3 2.68
Run Code Online (Sandbox Code Playgroud)
新行为[熊猫 >= 1.1]
pd.__version__
# '1.1.0.dev0+2004.g8d10bfb6f'
df.apply(mul2)
hello
a
0 2.00
1 4.00
2 1.34
3 2.68
Run Code Online (Sandbox Code Playgroud)