【问题标题】:Division by 0 within a map function在地图函数中除以 0
【发布时间】:2018-08-08 07:46:07
【问题描述】:

我想知道如何在 map 函数中处理除以 0 错误(在 Python 2.7 下)。

不使用map,我得到

def my_func(a, b):
    return a / b

a = pandas.DataFrame([1, 1])
b = pandas.DataFrame([1, 0])

my_func(a, b)
Out[]: 
          0
0  1.000000
1       inf

但我在使用map 时得到不同的结果:

map(my_func, a, b)
Out[]:
File "<ipython-input-12-83b4adbfd8de>", line 3, in func
return a / b
ZeroDivisionError: integer division or modulo by zero

我该如何处理这个错误?

【问题讨论】:

  • 您可以确保 NumPy 的除法始终与 return np.divide(a, b) 一起使用
  • @jdjdehesa,确实我这个方法没有任何错误,只有一个警告。但是,map(my_func, a, b) 的输出是Out[28]: [0]
  • 或类似return np.asarray(a) / np.asarray(b)
  • 不明白为什么输出是Out[]: [0]?
  • 嗯,问题是map(my_func, a, b) 实际上会遍历ab 的列标签。在您的示例中,ab 都具有相同的列列表 [0],所以实际上我在控制台中得到的输出是 [nan] (0 / 0)。您可以改为通过 a[0], b[0]a.values, b.values 或其他内容...

标签: python pandas numpy divide-by-zero


【解决方案1】:

你可以这样试试:

def my_func(a, b):
    if b != 0: return a / b
    else: return np.inf

或通过以下方式捕获警告:

import warnings
warnings.filterwarnings("error")

def my_func(a, b):
    try:
        return a / b
    except:
        return np.inf

【讨论】:

  • 这对于 0/0(应该是 NaN)或应该返回负无穷大的情况并不正确(如果 a 为负数或 b-0) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
相关资源
最近更新 更多