iT邦幫忙

2025 iThome 鐵人賽

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

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

菜雞學習 pandas 的 30 日讀書分享【Day 14】Index 物件

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250813/20168290N4j5ADtQzO.jpg

Index 物件

pandas 的 Index 物件負責保存軸的標籤 (包括 DataFrame 的欄名) 與其他詮釋資料 (例如軸名)。

當建構 Series 或是 DataFrame 時,所使用的任何標籤陣列或其他序列在內部都會被轉成 Index:

In [84]: obj = pd.Series(np.arange(3), index=["a", "b", "c"])

In [85]: index = obj.index

In [86]: index
Out[86]: Index(['a', 'b', 'c'], dtype='object')

In [87]: index[1:]
Out[87]" Index(['b', 'c'], dtype='object')

Index 物件是不可變的,所以無法被使用者修改:

index[1] = "d" # TypeError

「不可變」的特性可使不同的資料結構更安全的共用 Index 物件:

In [88]: labels = pd.Index(np.arange(3))

In [89]: labels
Out[89]: Int64Index([0, 1, 2], dtype='int64')

In [90]: obj2 = pd.Series([1.5, -2.5, 0], index=labels)

In [91]: obj2
Out[91]:
0    1.5
1   -2.5
2    0.0
dtype: float64

In [92]: obj2.index is labels
Out[92]: True

除了像陣列之外,Index 的行為也很像固定大小的集合 (set):

In [93]: frame3
Out[93]:
state Ohio Nevada
2000  1.5   NaN
2001  1.7   2.4
2002  3.6   2.9

In [94]: frame3.columns
Out[94]: Index(['Ohio', 'Nevada'], dtype='object', name='state')

In [95]: "Ohio" in frame3.columns
Out[95]: True

In [96]: 2003 in frame3.index
Out[96]: False

與 Python 的集合不同的是,pandas 的 Index 可能有重複的標籤:

In [97]: pd.Index(["foo", "foo", "bar", "bar"])
Out[97]: Index(['foo', 'foo', 'bar', 'bar'], dtype='object')

用重複的標籤來進行選擇,會選出該標籤的所有實例。

以下為較常用的方法與屬性

  • append(): 串接其他的 Index 物件,產生新的 Index。
  • difference(): 計算集合差作為 Index。
  • intersection(): 計算集合交集。
  • union(): 計算聯集。
  • isin(): 計算布林陣列,指出各個值有沒有在傳入的集合裡。
  • delete(): 將位於 Index i 的元素刪除並計算新的 Index。
  • drop(): 將傳入的值刪除並計算新的 Index。
  • insert(): 在 Index i 插入元素並計算新的 Index。
  • is_monotonic: 每個元素都大於或等於前一個元素就回傳 True
  • is_unique: Index 沒有重複值就回傳 True
  • unique(): 計算包含 Index 裡不同值的陣列。

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


上一篇
菜雞學習 pandas 的 30 日讀書分享【Day 13】DataFrame (五)
下一篇
菜雞學習 pandas 的 30 日讀書分享【Day 15】reindex (重設索引) 上
系列文
菜雞學習 pandas 的 30 日讀書分享30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言