什麼是pandas索引(Index)?¶
在pandas中,索引(Index)就像Excel表格裏的“行號”和“列標題”,是用來標識數據位置和內容的關鍵。比如,當你有一個包含學生信息的表格,左邊的“學號”或“姓名”就是行索引,上面的“科目”“成績”就是列索引。它的作用就像“數據的身份證”,讓我們能快速定位、排序和管理數據。
爲什麼索引很重要?¶
- 快速定位數據:通過索引直接找到對應行/列的數據,不用逐個查找。
- 數據排序的基礎:排序時需要根據索引或值重新排列數據。
- 數據合併的依據:不同數據框合併時,索引可以作爲匹配的“鑰匙”。
一、數據排序:按索引或值重新排列¶
pandas中排序分爲兩種:按索引排序(默認按位置)和按值排序(按數據內容)。
1. Series排序(單列數據)¶
假設我們有一個記錄商品銷量的Series,索引是商品名,值是銷量。
import pandas as pd
# 創建示例Series:索引是商品名,值是銷量
s = pd.Series([50, 30, 80, 20], index=['蘋果', '香蕉', '橙子', '草莓'])
print("原始Series:")
print(s)
輸出:
原始Series:
蘋果 50
香蕉 30
橙子 80
草莓 20
dtype: int64
(1)按索引排序(sort_index)¶
按索引(商品名)的字母/中文順序排列:
# 按索引升序排序(默認ascending=True)
sorted_by_index_asc = s.sort_index()
print("\n按索引升序排序後:")
print(sorted_by_index_asc)
# 按索引降序排序(設置ascending=False)
sorted_by_index_desc = s.sort_index(ascending=False)
print("\n按索引降序排序後:")
print(sorted_by_index_desc)
輸出:
按索引升序排序後:
草莓 20
蘋果 50
香蕉 30
橙子 80
dtype: int64
按索引降序排序後:
橙子 80
香蕉 30
蘋果 50
草莓 20
dtype: int64
(2)按值排序(sort_values)¶
按銷量(值)從小到大或從大到小排列:
# 按值升序排序(默認ascending=True)
sorted_by_value_asc = s.sort_values()
print("\n按銷量升序排序後:")
print(sorted_by_value_asc)
# 按值降序排序(設置ascending=False)
sorted_by_value_desc = s.sort_values(ascending=False)
print("\n按銷量降序排序後:")
print(sorted_by_value_desc)
輸出:
按銷量升序排序後:
草莓 20
香蕉 30
蘋果 50
橙子 80
dtype: int64
按銷量降序排序後:
橙子 80
蘋果 50
香蕉 30
草莓 20
dtype: int64
2. DataFrame排序(多列數據)¶
DataFrame是二維表格,排序可以按行索引(默認)或列值(指定列)。
假設我們有一個學生成績表:
# 創建示例DataFrame:索引是學生姓名,列是科目和分數
df = pd.DataFrame({
'語文': [85, 78, 92],
'數學': [90, 82, 88],
'英語': [75, 90, 85]
}, index=['小明', '小紅', '小剛'])
print("原始DataFrame:")
print(df)
輸出:
原始DataFrame:
語文 數學 英語
小明 85 90 75
小紅 78 82 90
小剛 92 88 85
(1)按列值排序(sort_values)¶
比如按“語文”成績升序排列:
# 按“語文”列升序排序
df_sorted = df.sort_values(by='語文')
print("\n按語文成績升序排序後:")
print(df_sorted)
輸出:
按語文成績升序排序後:
語文 數學 英語
小紅 78 82 90
小明 85 90 75
小剛 92 88 85
(2)按行索引排序(sort_index)¶
按行索引(學生姓名)的字母順序排列:
# 按行索引降序排序(中文按拼音順序,'小剛' > '小紅' > '小明')
df_sorted_index = df.sort_index(ascending=False)
print("\n按行索引降序排序後:")
print(df_sorted_index)
輸出:
按行索引降序排序後:
語文 數學 英語
小剛 92 88 85
小明 85 90 75
小紅 78 82 90
二、重命名索引:修改行/列標籤¶
有時候默認的索引(如0,1,2或中文姓名)不夠直觀,我們可以手動重命名行索引或列索引。
1. 重命名行索引(rename方法)¶
假設我們想把學生姓名換成“第一組”“第二組”等更簡潔的標籤:
# 重命名行索引(原索引:小明、小紅、小剛 → 新索引:第一組、第二組、第三組)
df_renamed = df.rename(index={'小明': '第一組', '小紅': '第二組', '小剛': '第三組'})
print("\n重命名行索引後:")
print(df_renamed)
輸出:
重命名行索引後:
語文 數學 英語
第一組 85 90 75
第二組 78 82 90
第三組 92 88 85
2. 重命名列索引(rename方法)¶
如果想把“語文”“數學”等列名改成更易懂的“Chinese”“Math”,可以這樣做:
# 重命名列索引(原列名:語文、數學、英語 → 新列名:Chinese、Math、English)
df_renamed_cols = df.rename(columns={'語文': 'Chinese', '數學': 'Math', '英語': 'English'})
print("\n重命名列索引後:")
print(df_renamed_cols)
輸出:
重命名列索引後:
Chinese Math English
小明 85 90 75
小紅 78 82 90
小剛 92 88 85
3. 直接修改索引(inplace參數)¶
如果希望直接修改原數據(而非生成新數據),可以用inplace=True:
# 直接修改列名(原列名:語文、數學、英語 → 新列名:語文、數學、英語)
df.columns = ['語文', '數學', '英語'] # 直接賦值,需確保新列名數量和原列數一致
print("\n直接修改列名後:")
print(df)
# 直接修改行索引(原行索引:小明、小紅、小剛 → 新行索引:1、2、3)
df.index = [1, 2, 3]
print("\n直接修改行索引後:")
print(df)
三、注意事項¶
- 區分行/列索引:
df.index是行索引,df.columns是列索引,排序和重命名時需明確。 - 保持索引長度一致:修改索引時,新索引列表的長度必須和原數據行數/列數相同,否則會報錯。
- inplace參數:默認
inplace=False,生成新數據不修改原數據;設爲True則直接修改原數據(謹慎使用!)。
總結¶
索引是pandas數據處理的核心工具,掌握排序(按索引/值)和重命名(行/列)能幫你更高效地管理數據。通過多練習簡單示例(如本文中的學生成績表),你會很快熟悉這些操作!
現在就打開Python編輯器,跟着代碼嘗試創建自己的DataFrame,動手排序和重命名吧~