如何在 Pandas Series 的 argsort 方法中保留 NaN 为 NaN?
在 Pandas Series 中,argmax() 方法用于对给定 Series 的值进行排序,它将返回另一个 Series 对象,其中包含对原始 Series 值进行排序的索引。如果 Series 对象包含任何空值或缺失值,则 argsort() 方法会返回 -1 来指示该缺失值的索引(NaN 值)。
不幸的是,argsort 方法没有任何参数可以跳过空值。如果要更改缺失值的默认表示形式(-1),则需要按照以下描述的方法进行操作。
示例 1
import pandas as pd import numpy as np # creating series series = pd.Series([8,6,None,5,2,None,7]) print(series) # apply argsort() result = series.argsort() print("Output argsort:", result) # replace -1 with Nan print("Output after replacing -1 value: ",result.replace(-1,np.nan))
解释
在以下示例中,我们使用 Python 整数列表和一些 None 值创建了一个 Series。然后,我们对该 Series 数据应用了 argsort() 方法。在获取 argsort 后的 Series 后,我们使用 NumPy 包将 -1 值替换为 NaN。
输出
0 8.0 1 6.0 2 NaN 3 5.0 4 2.0 5 NaN 6 7.0 dtype: float64 Output argsort: 0 3 1 2 2 -1 3 1 4 4 5 -1 6 0 dtype: int64 Output after replacing -1 value: 0 3.0 1 2.0 2 NaN 3 1.0 4 4.0 5 NaN 6 0.0 dtype: float64
在上面的输出块中,我们可以看到初始 Series 对象、argsort 后的 Series 对象,以及替换 NaN 值后的 Series 对象。其中,我们可以观察到由于替换了 NaN 值,数据类型索引发生了变化。
示例 2
import pandas as pd import numpy as np # creating series series = pd.Series({'A':123,'B':458,"C":None, "D":238, 'E':np.nan, 'G':360 }) print(series) # apply argsort() and replace -1 with Nan result = series.argsort().mask(series.isnull()) print("Output argsort:", result)
解释
让我们采用另一种方法,在 Pandas Series 的 argsort 方法中保留 NaN 为 NaN。最初,我们使用 Python 字典创建了一个 Pandas Series 对象,然后我们结合使用了 Pandas 的 mask 方法和 argsort 方法来保留 NaN 值。
输出
A 123.0 B 458.0 C NaN D 238.0 E NaN G 360.0 dtype: float64 Output argsort: A 0.0 B 2.0 C NaN D 3.0 E NaN G 1.0 dtype: float64
我们通过在 argsort 方法中使用 mask 方法,实现了将 NaN 值保留为 NaN。这里我们将 series.isnull() 方法作为 mask 方法的参数。
广告