Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python `请尝试在应用函数中使用`/`except`块_Python_Python 3.x_Pandas - Fatal编程技术网

Python `请尝试在应用函数中使用`/`except`块

Python `请尝试在应用函数中使用`/`except`块,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在尝试将一个函数应用于pandasdataframe。我的函数有一个try/except块来捕获异常,比如zeroditionerror,但它失败了 数据框有100多列。通过选择列的子集,实际函数将应用于每一行 下面是我的代码 功能: import pandas as pd import numpy as np def d(x): x0=22/7 try: return x0/x except: return 0 df=pd.Dat

我正在尝试将一个函数应用于
pandas
dataframe。我的函数有一个
try/except
块来捕获异常,比如
zeroditionerror
,但它失败了

数据框有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
应用函数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

Out[173]: 
          a         b
0  0.000000  0.000000
1  1.571429  1.047619
2  1.047619  0.785714
3  0.785714  0.628571
有人能告诉我我错过了什么吗。令人沮丧的是@

指定列:

df[0].apply(lambda x : d(x))
输出:

对于整个数据集使用:df.applymap(d)

指定列:

df[0].apply(lambda x : d(x))
输出:


对于整个数据集使用:df.applymap(d)

如果您的真实数据集非常大,这里有一个比使用
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

如果您的真实数据集非常大,这里有一个比使用
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

如果您只希望捕获
ZeroDivisionError
,那么应该明确地这样说。切勿使用除之外的纯
,并尝试捕获您实际知道如何处理的最小异常集。在此上下文中,除0不会触发异常。不是“catch”不起作用,而是没有引发异常。如果您只希望捕获
ZeroDivisionError
,那么应该明确地说。切勿使用除
之外的纯
,并尝试捕获您实际知道如何处理的最小异常集。在此上下文中,除0不会触发异常。这并不是“捕获”不起作用,而是没有提出例外。谢谢,但没有帮助。数据框有100多列。通过选择列的子集,此函数将应用于每一行。
。与其他解决方案相比,applymap
的性能将非常差。谢谢,但没有帮助。数据框有100多列。通过选择列的子集,此函数将应用于每一行。
.applymap
将与其他解决方案相比执行得非常糟糕。抱歉,这里的要点不是在发生被零除时捕获异常。不行efficient@Mansoor解决方案的目的应该是解决实际问题,而不是你认为你可能遇到的切题。对于
d(x)
来说,永远不会有异常,因此没有什么可捕捉的。此解决方案完全完成了您要做的事情。@ALollz。好的,谢谢你的回复。。。但我不同意。。。有时候。就这么简单。我有另一种方法。想知道如果有任何异常,为什么不执行“except”块!抱歉,这里的要点不是在发生被零除时捕获异常。不行efficient@Mansoor解决方案的目的应该是解决实际问题,而不是你认为你可能遇到的切题。对于
d(x)
来说,永远不会有异常,因此没有什么可捕捉的。此解决方案完全完成了您要做的事情。@ALollz。好的,谢谢你的回复。。。但我不同意。。。有时候。就这么简单。我有另一种方法。想知道如果有任何异常,为什么不执行“except”块!