Pandas序列的argsort方法如何处理NaN值?


在Pandas序列中,argmax()方法用于对序列的值进行排序,它将返回一个新的序列对象,其中包含对原始序列值进行排序的索引。如果序列对象包含任何空值或缺失值,则argsort()方法将其索引值设为-1。

为了对序列对象的值进行排序,argsort方法默认使用快速排序算法,我们也可以使用kind参数应用其他排序算法,例如‘mergesort’,‘heapsort’,‘stable’。

argsort方法返回一个序列,其值被替换为已排序的索引。它不会更改原始序列对象的索引标签。

示例1

import pandas as pd

# creating series
series = pd.Series([None,5,2,None,7])
print(series)

# apply argsort()
print("Output argsort:", series.argsort())

解释

在下面的示例中,我们使用包含一些None值的Python列表创建了一个序列。然后,我们在该序列数据上应用了argsort()方法。

输出

0 NaN
1 5.0
2 2.0
3 NaN
4 7.0
dtype: float64

Output argsort:
0 -1
1  1
2  0
3 -1
4  2
dtype: int64

在上面的输出块中,我们可以看到argsort方法生成的序列对象,其中我们可以看到-1值,它表示原始序列对象的None值的索引。

示例2

import pandas as pd

# creating dates
date = pd.date_range("2021-07-01", periods=5, freq="M")

# creating pandas Series with date range index
s = pd.Series([9, None, 2, 5, 6], index=date)
print(s)

# apply argsort
print("Output of argsort:",s.argsort())

解释

让我们再举一个Pandas序列对象的例子来应用argsort方法。最初,我们使用整数列表和一个None值创建了一个Pandas序列对象,然后在该数据上应用了argsort方法。序列的索引是日期范围值。

输出

2021-07-31 9.0
2021-08-31 NaN
2021-09-30 2.0
2021-10-31 5.0
2021-11-30 6.0
Freq: M, dtype: float64

Output of argsort:
2021-07-31  1
2021-08-31 -1
2021-09-30  2
2021-10-31  3
2021-11-30  0
Freq: M, dtype: int64

输出序列对象中索引标签为2021-07-31的元素来自原始序列的第1个索引位置,它是原始序列中最小的数字。None值被argsort方法跳过,因此它将该特定元素的索引表示为-1。

同样,输出序列对象中索引标签为2021-11-30的元素来自原始序列的第0个索引位置,它是原始序列值中最大的数字。这样,Pandas序列argmax()方法处理了None值。

更新于:2022年3月9日

浏览量:205

开启你的职业生涯

完成课程获得认证

开始学习
广告