与 numpy 不同,Pandas 系列 np.max 与 NaN 不将 NaN 显示为最大值
Pandas series np.max with NaN does not show NaN as max value unlike numpy
data_df["colname"]
<class 'pandas.core.series.Series'>
0 -475.0
1 -799.0
2 -656.0
3 -444.0
4 -901.0
...
575 NaN
576 NaN
577 NaN
578 NaN
579 NaN
type(data_df["colname"].iloc[579])
<class 'numpy.float64'>
data_df["colname"].iloc[579]
nan
当我 运行 带有 np.nan 的普通数组时,我得到以下结果:
>>> np.max([1,2,3,4,np.float64(np.nan)], initial=1)
nan
>>> np.max([1,2,3,4,np.nan], initial=1)
nan
但是对于 pandas,尽管包含 NaN 值:
np.max(data_df["colname"])
83.0
不匹配,这是怎么回事?
此外,尽管 np.amax 有 'initial' 参数:
>>> np.max([1,2,3,4,np.nan], initial=1)
nan
pandas 报错:
np.max(data_df["colname"], initial=1)
validate_kwargs(fname, kwargs, self.defaults)
File "/Users/-/poetry/virtualenvs/-/lib/python3.9/site-packages/pandas/util/_validators.py", line 153, in validate_kwargs
_check_for_invalid_keys(fname, kwargs, compat_args)
File "/Users/-/poetry/virtualenvs/-/lib/python3.9/site-packages/pandas/util/_validators.py", line 127, in _check_for_invalid_keys
raise TypeError(f"{fname}() got an unexpected keyword argument '{bad_arg}'")
TypeError: max() got an unexpected keyword argument 'initial'
似乎没有通过 pandas 关键字参数验证。
如果您使用 np.nanmax()
功能,它可以解决问题:
import numpy as np
np.nanmax([1,2,3,4,np.nan])
输出
4.0
您也可以将此解决方案用于 pandas DataFrame:
import numpy as np
np.nanmax(data_df["colname"].values)
请注意,您的错误回溯实际上会引发 pandas
代码中的错误。初始验证已传递给 pandas
.
np.max(data_df['colname'].values, initial=1)
是纯numpy版本
(稍后我会补充细节。)
将 np.max
视为与其他 numpy
ufunc
行为相似的原始版本。 np.nanmax
是 nanfunctions.py
中的众多附加组件之一。在这里它将 nan
替换为 -inf
。并且只适用于花车。 pandas
用户更多地遇到丢失数据,因此其开发人员添加了 bells-n-whistles,额外的 nan
处理确实花费时间。
data_df["colname"]
<class 'pandas.core.series.Series'>
0 -475.0
1 -799.0
2 -656.0
3 -444.0
4 -901.0
...
575 NaN
576 NaN
577 NaN
578 NaN
579 NaN
type(data_df["colname"].iloc[579])
<class 'numpy.float64'>
data_df["colname"].iloc[579]
nan
当我 运行 带有 np.nan 的普通数组时,我得到以下结果:
>>> np.max([1,2,3,4,np.float64(np.nan)], initial=1)
nan
>>> np.max([1,2,3,4,np.nan], initial=1)
nan
但是对于 pandas,尽管包含 NaN 值:
np.max(data_df["colname"])
83.0
不匹配,这是怎么回事?
此外,尽管 np.amax 有 'initial' 参数:
>>> np.max([1,2,3,4,np.nan], initial=1)
nan
pandas 报错:
np.max(data_df["colname"], initial=1)
validate_kwargs(fname, kwargs, self.defaults)
File "/Users/-/poetry/virtualenvs/-/lib/python3.9/site-packages/pandas/util/_validators.py", line 153, in validate_kwargs
_check_for_invalid_keys(fname, kwargs, compat_args)
File "/Users/-/poetry/virtualenvs/-/lib/python3.9/site-packages/pandas/util/_validators.py", line 127, in _check_for_invalid_keys
raise TypeError(f"{fname}() got an unexpected keyword argument '{bad_arg}'")
TypeError: max() got an unexpected keyword argument 'initial'
似乎没有通过 pandas 关键字参数验证。
如果您使用 np.nanmax()
功能,它可以解决问题:
import numpy as np
np.nanmax([1,2,3,4,np.nan])
输出
4.0
您也可以将此解决方案用于 pandas DataFrame:
import numpy as np
np.nanmax(data_df["colname"].values)
请注意,您的错误回溯实际上会引发 pandas
代码中的错误。初始验证已传递给 pandas
.
np.max(data_df['colname'].values, initial=1)
是纯numpy版本
(稍后我会补充细节。)
将 np.max
视为与其他 numpy
ufunc
行为相似的原始版本。 np.nanmax
是 nanfunctions.py
中的众多附加组件之一。在这里它将 nan
替换为 -inf
。并且只适用于花车。 pandas
用户更多地遇到丢失数据,因此其开发人员添加了 bells-n-whistles,额外的 nan
处理确实花费时间。