np.vectorize 中带有 try except 的函数返回错误消息

问题描述 投票:0回答:1

我有一个矢量化函数,可以对数字进行简单的调整

import pandas as pd
import numpy as np

@np.vectorize
def adjust_number(number: int) -> int:

    max_number = 6
    default_substitue = 2

    # Try to convert to int, if not possible, use default_substitue
    try:
        number = int(number)
    except:
        number = default_substitue

    return min(number, max_number)

我在数据框上应用该函数

df = pd.DataFrame({'numbers': [1.0, 9.0, np.nan]})
df = df.assign(adjusteded_number=lambda x: adjust_number(x['numbers']))

这会返回预期的输出,但我也收到一条奇怪的返回消息

c:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\lib\function_base.py:2412: RuntimeWarning: invalid value encountered in adjust_number (vectorized)
outputs = ufunc(*inputs)

这不是一个大问题,但很烦人。该错误似乎是由

try-except
触发的。如果我修改该函数,删除
try-except
(在不破坏功能的情况下我确实无法做到这一点),错误就会消失。

造成这种情况的原因是什么以及如何消除错误消息?

python pandas numpy vectorization
1个回答
0
投票

如果您担心的是 NaN/无穷大,您可以使用 NumPy

isfinite
函数来检查这些:

@np.vectorize
def adjust_number(number: int) -> int:
    max_number = 6
    default_substitue = 2

    # Try to convert to int, if not possible, use default_substitue
    if np.isfinite(number):
        number = int(number)
    else:
        number = default_substitue

    return min(number, max_number)
© www.soinside.com 2019 - 2024. All rights reserved.