我正在尝试将功能应用于pandas
数据框。我的函数有一个try/except
块来捕获像ZeroDivisionError
这样的异常,但是失败了。
数据框具有100多个列。通过选择列的子集,实际功能将应用于每一行
以下是我的代码
功能:
import pandas as pd
import numpy as np
def d(x):
x0=22/7
try:
return x0/x
except:
return 0
df=pd.DataFrame({'a':[0,2,3,4],'b':[0,3,4,5]})
df
Out[174]:
a b
0 0 0
1 2 3
2 3 4
3 4 5
将Function as用作
后df.apply(lambda x:d(x))
Out[173]:
a b
0 inf inf
1 1.571429 1.047619
2 1.047619 0.785714
3 0.785714 0.628571
在索引0
上预期inf
而不是0
Out[173]:
a b
0 0.000000 0.000000
1 1.571429 1.047619
2 1.047619 0.785714
3 0.785714 0.628571
谁能让我知道我在这里想念什么。真令人沮丧...:@
答案 0 :(得分:4)
指定列:
df[0].apply(lambda x : d(x))
出局:
0 0.000000
1 3.142857
2 1.571429
3 1.047619
4 0.785714
Name: 0, dtype: float64
对于整个数据集,请使用:df.applymap(d)
答案 1 :(得分:1)
如果您的真实数据集非常大,这是一种比使用apply
更快的选择:
import math
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [0, 2, 3, 4], 'b': [0, 3, 4, 5]})
df = (math.pi / df).replace(np.inf, 0)
结果:
a b
0 0.000000 0.000000
1 1.570796 1.047198
2 1.047198 0.785398
3 0.785398 0.628319