我有一个矢量化函数,可以对数字进行简单的调整
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
(在不破坏功能的情况下我确实无法做到这一点),错误就会消失。
造成这种情况的原因是什么以及如何消除错误消息?
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)