【问题标题】:Have pandas produce error when multiplying with nan与 nan 相乘时让 pandas 产生错误
【发布时间】:2019-05-02 02:46:00
【问题描述】:

我想让 pandas 在尝试对具有 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]])

看起来像这样:

如果我将它乘以其他一组值,它会乘以 DataFrame 中的有效条目,并保持 NaN 不变:

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

而我希望它在尝试对包含 NaN 的单元格进行算术运算时产生错误。

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

提前致谢!

【问题讨论】:

  • NaN 存在时为什么要它产生错误?
  • 应该是什么错误信息?一个用于整个数据框?对于每一行?对于每个单元格?数据框中的 NaN 是错误消息。
  • @Mr.T - 我没有想到这一点,但也许这里最好的方法是让我检查 df 是否包含 NaN,如果是,则我自己提出错误。

标签: python python-3.x pandas numpy


【解决方案1】:

NaN 值的类型为 float。因此,它们可以很好地处理 Pandas / NumPy 中的算术运算。您必须重写 Pandas / NumPy 方法才能实现您的目标。 不建议这样做。

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

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

【讨论】:

  • 是的 - 这是正确的做法,不是吗。谢谢。
  • 我认为您缺少not。此外,根据您使用此检查的目的,assert 可能是错误的工具。
  • @user2357112,谢谢,解决了这个问题,我实际上改用notnull .. 是的,当然你可以用if 声明提出ValueError,但这取决于用例.
【解决方案2】:

我不相信有内置的方法可以做到这一点,我什至不确定你的意图是否有意义。

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

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

并用作

mul(df, 2)

【讨论】:

  • 谢谢,是的,我认为这是最好的。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 2018-04-19
  • 2021-11-16
  • 2016-01-26
  • 1970-01-01
  • 2018-09-06
  • 2013-03-31
  • 2012-08-14
相关资源
最近更新 更多