`try` /`except`块在熊猫中不起作用

时间:2018-11-16 17:20:48

标签: python python-3.x pandas

我正在尝试将功能应用于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

谁能让我知道我在这里想念什么。真令人沮丧...:@

2 个答案:

答案 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