如何在 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 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.