如何在 Pandas 系列 argsort 方法中将 nan 保留为 nan?

pandasserver side programmingprogramming更新于 2025/5/18 9:52:17

在 Pandas 系列中,argmax() 方法用于对给定系列的值进行排序,它将返回另一个系列对象,该对象包含对原始系列值进行排序的索引。如果系列对象包含任何空值或缺失值,则 argsort() 方法将返回 -1 来指示该缺失值(Nan 值)的索引。

遗憾的是,argsort 方法没有任何参数可以跳过 Null 值。如果您想更改缺失值的默认表示形式 (-1)。然后,我们需要遵循以下描述的方法。

示例 1

import pandas as pd
import numpy as np

# 创建序列
series = pd.Series([8,6,None,5,2,None,7])
print(series)

# 应用 argsort()
result = series.argsort()
print("输出 argsort:", result)

# 用 Nan 替换 -1
print("替换 -1 值后的输出: ",result.replace(-1,np.nan))

解释

在下面的示例中,我们使用一个包含整数和一些 None 值的 Python 列表创建了一个序列。然后,我们对该序列数据应用了 argsort() 方法。在获得经过参数排序的系列后,我们使用 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

在上面的输出块中,我们可以看到初始系列对象、经过参数排序的系列对象以及替换了 Nan 值的系列对象。从中,我们可以观察到由于 Nan 值被替换,dtype 索引发生了变化。

示例 2

import pandas as pd
import numpy as np

# 创建系列
series = pd.Series({'A':123,'B':458,"C":None, "D":238, 'E':np.nan, 'G':360 })
print(series)

# 应用 argsort() 并将 -1 替换为 Nan
result = series.argsort().mask(series.isnull())

print("Output argsort:",结果)

解释

让我们采用另一种方法,在 Pandas 系列 argsort 方法中将 nan 保留为 nan。首先,我们用 Python 字典创建了一个 Pandas 系列对象,然后我们结合使用 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

我们通过引入 mask 方法和 argsort 方法实现了保留 nan 值。这里我们将 series.isnull() 方法用作 mask 方法的参数。


相关文章