如何在NumPy/Pandas中高效比较含NaN的数组并保留NaN位置?
如何在NumPy或Pandas中高效比较含NaN的数组并保留NaN位置
有没有基于NumPy或Pandas的高效方法,可以比较包含NaN的ndarray与其他数组,同时保留NaN的位置,而非将其替换为False?
实际行为
- NumPy:
np.array([np.nan]) > 5→array([False]) - Pandas:
pd.Series([np.nan]) > 5→0 False
期望行为
- NumPy:
np.array([np.nan]) > 5→array([nan]) - Pandas:
pd.Series([np.nan]) > 5→0 NaN
我知道可以在计算后根据输入中NaN的位置替换结果,但这种方法效率低得多。
已尝试方法
s = pd.Series([1, 2, 3, np.nan]) res = s > 1 res.loc[s.isna()] = np.nan
最优解决方案
基于Pandas的实现
s = pd.Series([1, 2, 3, np.nan]) res = (s > 1).astype('boolean') res.loc[s.isna()] = np.nan
- 感谢
@Michael Szczesny
仅基于NumPy的实现
s = np.array([1, 2, 3, np.nan]) res = np.where(np.isnan(s), np.nan, s > 1)
- 感谢
@ConfusedReptile | ᓕಲᗣ(来自Python Discord社区)
内容的提问来源于stack exchange,提问作者Ilan Geffen
相关产品推荐
相关产品推荐

