gpt4 book ai didi

python - 为什么 max() 有时返回 nan 有时忽略它?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:59 25 4
gpt4 key购买 nike

这个问题的动机是an answer我不久前就给过。

假设我有一个像这样的数据框

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

我想用行的最大值 I can do 替换 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() 在三种情况中的一种失败,但在所有三种情况下都失败。为什么 NaN 有时会被忽略,有时不会?

最佳答案

原因是 max 的工作原理是将第一个值作为“迄今为止看到的最大值”,然后检查每个其他值以查看它是否大于迄今为止看到的最大值。但是 nan 的定义是,与它的比较总是返回 False --- 也就是说,nan > 1 为 false,但 1 > nan 也是错误。

因此,如果您以 nan 作为数组中的第一个值,则每次后续比较都会检查是否 some_other_value > nan。这始终是错误的,因此 nan 将保留其位置“迄今为止看到的最大值”。另一方面,如果 nan 不是第一个值,那么当达到它时,比较 nan > max_so_far 将再次为 false。但在这种情况下,这意味着当前“迄今为止看到的最大值”(不是 nan)将仍然是迄今为止看到的最大值,因此 nan 将始终被丢弃。

关于python - 为什么 max() 有时返回 nan 有时忽略它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55546259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com