与nan相乘时让熊猫产生错误

时间:2018-11-29 23:37:27

标签: python python-3.x pandas numpy

我想让熊猫在进行涉及具有nan值的单元的算术时产生错误。因此,如果我创建一个虚拟DataFrame:

test_input = pd.DataFrame(columns=['a','b','c'],
                          index=[1,2],
                          data=[[np.nan, np.nan, 2.0],[np.nan, 1.0, 3.0]])

如下所示:

enter image description here

如果我再将此值乘以其他一组值,则它将乘以DataFrame中的有效条目,而将NaN保留为原样:

test_input * np.array([2,2,2])

enter image description here

我希望它每次尝试对包含NaN的单元进行算术运算时都会产生错误。

我尝试使用.fillna将None替换为NaN(据我所知,无法完成,因为fillna认为您没有输入任何值),然后将NaN替换为字符串(如果您尝试乘以浮点数而不是int会产生错误,但是我想知道是否还有一些更明显的方法不见了?

谢谢!

2 个答案:

答案 0 :(得分:2)

NaN的值为float类型。因此,它们可以在Pandas / NumPy中进行算术运算。您必须重写Pandas / NumPy方法才能实现目标。 不推荐这样做。

相反,只需在计算之前执行显式检查即可:

assert test_input.notnull().values.all()  # AssertionError if null value exists

答案 1 :(得分:1)

我不相信有内置的方法可以做到这一点,而且我不确定您的意图是否合理。

但是,您可以定义自己的乘法函数,并且如果数据帧中有任何空值,则只会引发错误。

def mul(df, n):
    if df.isnull().any().any(): raise ValueError('Error - Custom Message')
    return df*n

并用作

mul(df, 2)