如何在 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 方法的参数。

更新于: 2022-03-09

430 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告