【发布时间】:2021-10-11 00:19:14
【问题描述】:
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 有“初始”参数:
>>> np.max([1,2,3,4,np.nan], initial=1)
nan
熊猫它给出了一个错误:
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.max实际上将任务委托给熊猫系列.max方法。检查它的文档。那有skipna参数 -
请注意,您的错误回溯实际上引发了
pandas代码中的错误。initial验证已传递给pandas。np.max(data_df['colname'].values, initial=1)是purenumpy 版本。 -
@hpaulj 你回答了我的问题,如果你发表你的评论作为答案,我会接受它作为解决方案。
-
虽然这很令人费解,为什么这两种实现如此不同。