有一類相關的方法可以提取關於一維 Series 的值資訊:
In [290]: obj = pd.Series(["c", "a", "d", "a", "a", "b", "b", "c", "c"])
unique()
可以提供在 Series 裡的不重複值陣列:
In [291]: uniques = obj.unique()
In [292]: uniques
Out[292]: array(['c', 'a', 'd', 'c'], dtype=object)
不重複的值不一定按照初次的順序來回傳,也不會按照排序順序排序,但如果需要也可以在事後進行排序 uniques.sort()
,value_counts()
是相關的函式,會算一個包含值的頻率 Series:
In [293]: obj.value_counts()
Out[293]:
c 3
a 3
b 2
d 1
dtype: int64
為了方便起見,Series 會按值降序排序,value_counts()
也可以當成頂級的 pandas 方法,可以和 NumPy 陣列或其他 Python 序列一起使用:
In [294]: pd.value_counts(obj.to_numpy(), sort=False)
Out[294]:
c 3
a 3
d 1
b 2
dtype: int64
isin()
可以使用向量化的方式檢查項目是不是成員,適合用來從一個資料組篩選出屬於 Series 的值或 DataFrame 的欄子集合:
In [295]: obj
Out[295]:
0 c
1 a
2 d
3 a
4 a
5 b
6 b
7 c
8 c
dtype: object
In [296]: mask = obj.isin(["b", "c"])
In [297]: mask
Out[297]:
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
In [298]: obj[mask]
Out[298]:
0 c
5 b
6 b
7 c
8 c
dtype: object
Index.get_indexer()
是與 isin()
相關的方法,可以產生一個陣列的值(值有可能相同),在另一個陣列(值不相同)裡的索引,結果會是一個陣列:
In [299]: to_match = pd.Series(["c", "a", "b", "b", "c", "c"])
In [300]: unique_vals = pd.Series(["c", "b", "a"])
In [301]: indices = pd.Index(unique_vals).get_indexer(to_match)
In [302]: indices
Out[302]: array([0, 2, 1, 0, 2])
isin()
:計算一個布林陣列,指出 Series 或 DataFrame 的每一個值是否出現在傳入的值序列裡。get_indexer()
:計算整數索引,指出一個陣列的每個值在另一個陣列內的哪個位置,可協助進行資料對齊與連接類型操作。unique()
:為一個 Series 算出不相同值組成的陣列,按照看到的順序回傳。value_counts()
回傳一個 Series,索引為互不相同的值,值是索引值的頻率,按照數量降序排序。
今日的分享就到這囉,我們明天見,掰掰!