这个问题是由我前段时间给出的答案引起的。
假设我有一个这样的数据框
import numpy as np
import pandas as pd
df = pd.DataFrame({'a': [1, 2, np.nan], 'b': [3, np.nan, 10], 'c':[np.nan, 5, 34]})
a b c
0 1.0 3.0 NaN
1 2.0 NaN 5.0
2 NaN 10.0 34.0
我想,以取代NaN
由最大行的,我可以做
df.apply(lambda row: row.fillna(row.max()), axis=1)
这给了我想要的输出
a b c
0 1.0 3.0 3.0
1 2.0 5.0 5.0
2 34.0 10.0 34.0
但是,当我使用
df.apply(lambda row: row.fillna(max(row)), axis=1)
由于某种原因,仅在以下三种情况中的两种情况下才可以正确更换它:
a b c
0 1.0 3.0 3.0
1 2.0 5.0 5.0
2 NaN 10.0 34.0
确实,如果我亲自检查
max(df.iloc[0, :])
max(df.iloc[1, :])
max(df.iloc[2, :])
然后打印
3.0
5.0
nan
做的时候
df.iloc[0, :].max()
df.iloc[1, :].max()
df.iloc[2, :].max()
它打印预期的
3.0
5.0
34.0
我的问题是,为什么max()
在三种情况中有一种失败了,但在全部3种情况中都没有失败NaN
?
原因是max
通过将第一个值作为“到目前为止看到的最大值”,然后互相检查该值是否大于迄今为止看到的最大值来起作用。但是nan
,定义它是为了使与它的比较始终返回False
—nan > 1
即为false但1 > nan
也为false。
因此,如果您以nan
数组中的第一个值开头,则每个后续比较都将检查是否为some_other_value > nan
。这将始终是错误的,因此nan
将保留其位置为“到目前为止所能看到的最大值”。另一方面,如果nan
不是第一个值,那么当达到第一个值时,比较`nan
max_so_far
将再次为假。但是在这种情况下,这意味着当前的“到目前为止看到的最大值”(不是
nan`)将保持到目前为止看到的最大值,因此nan将始终被丢弃。
问题内容: 我有一个带有关系的实体,我想通过一个查询来检索它,因此使用。有时,Hibernate不尊重它,而是发出N + 1 秒。随着 有时 我的意思是,因为我不知道是什么触发它,我有案件对不同的查询,这可能发生,或者不一样的类。 这是带有我使用的注释的简化实体: 用 我希望单个查询能够同时获取其及其内容,例如 相反,我得到了第一选择所有N S和那么N 献给所有S(考虑没有缓存)。 我发现了许多类
问题内容: 我想查找包含字符串的行,如下所示: 但是,这失败了,因为某些元素是NaN: ValueError:无法使用包含NA / NaN值的向量建立索引 所以我诉诸于混乱 有没有更好的办法? 问题答案: 有一个标志: 参见文档: na:默认NaN,填充缺失值的值。 因此,您可以执行以下操作:
我很熟悉在JavaScript中是“怪异的”,即总是返回,如本文所述。因此,不应进行比较来检查,而应使用isNaN(..)取而代之的是。 所以我惊讶地发现 这似乎不一致。为什么会有这种行为? 它是怎么工作的?方法是否专门检查?
问题内容: 只是出于好奇。 数字似乎不太合逻辑。顺便说一句,就像或返回假。这是javascript的特性之一,还是有原因呢? 编辑:谢谢你的回答。但是,要让所有人适应现实并非易事。阅读答案和Wiki我了解得更多,但仍然有类似 与NaN的比较始终会返回无序结果,即使与自身进行比较也是如此。比较谓词是信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是无信号的,因此x = x返回false
问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么
注:据我所知,该问题不是以下问题的重复问题: HTML5:为什么我的“oninvalid”属性让模式失败 HTML5表单必需属性。设置自定义验证消息 如何更改或删除HTML5表单验证默认错误消息 给定一个字段: 为验证设置了属性,例如对于4个字符的十六进制字符串输入设置了 下面是一个示例,说明了这一点: 验证工作几乎与预期一样,除非用户输入无效条目,然后继续尝试并编辑它,其以下输入状态仍然无效: