iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
佛心分享-讓我升級的那些書

菜雞學習 pandas 的 30 日讀書分享系列 第 18

菜雞學習 pandas 的 30 日讀書分享【Day 18】檢索、選擇與篩選

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250816/20168290fC7uMMm2U2.png

檢索、選擇與篩選

Series 檢索 obj[...] 的工作方式類似 NumPy 的陣列檢索,但可以使用 Series 的索引值,而不是只能使用整數。

In [124]: obj = pd.Series(np.arange(4.), index=["a", "b", "c", "d"])

In [125]: obj
Out[125]:
a   0.0
b   1.0
c   2.0
d   3.0
dtype: float64

In [126]: obj["b"]
Out[126]: 1.0

In [127]: obj[1]
OUt[127]: 1.0

In [128]: obj[2:4]
Out[128]:
c   2.0
d   3.0
dtype: float64

In [129]: obj[["b", "a", "d"]]
Out[129]:
b   1.0
a   0.0
d   3.0
dtype: float64

In [130]: obj[[1, 3]]
Out[130]:
b   1.0
d   3.0
dtype: float64

In [131]: obj[obj < 2]
Out[131]:
a   0.0
b   1.0
dtype: float64

雖然可以使用標籤來選擇資料,但是在選擇索引值時,比較好的方式是使用特殊的 loc 運算子:

In [132]: obj.loc[["b", "a", "d"]]
Out[122]:
b   1.0
a   0.0
d   3.0
dtype: float64

使用 loc 的原因是因為使用 [] 來檢索時,會以不同的方式對待整數,如果索引包含整數,會將整數視為標籤,同樣的索引產生的結果會隨著索引的資料型態而改變:

In [133]: obj1 = pd.Series([1, 2, 3], index=[2, 0, 1])

In [134]: obj2 = pd.Series([1, 2, 3], index=["a", "b", "c"])

In [135]: obj1
Out[135]:
2    1
0    2
1    3
dtype: int64

In [136]: obj2
Out[136]:
a    1
b    2
c    3
dtype: int64

In [137]: obj1[[0, 1, 2]]
Out[137]:
2    1
0    2
1    3
dtype: int64

In [138]: obj2[[0, 1, 2]]
Out[138]:
a    1
b    2
c    3
dtype: int64

今日的分享就到這囉,我們明天見,掰掰!


上一篇
菜雞學習 pandas 的 30 日讀書分享【Day 17】從一軸移除項目
下一篇
菜雞學習 pandas 的 30 日讀書分享【Day 19】loc 與 iloc
系列文
菜雞學習 pandas 的 30 日讀書分享30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言