目錄
- 一、索引概念
- 二、創建索引
- ①匯入資料時指定索引
- ②匯入資料后指定索引df.set_index()
- 三、常用的索引屬性
- 四、常用索引方法
- 五、索引重置reset_index()
- 六、修改索引值(修改列名)
一、索引概念
??“索引”類似一本書的目錄(頁碼),通過目錄(頁碼),讓我們能快速找到想看的位置,對于一個DataFrame資料框,其中:
- 行索引(Label index),是一條完整資料的索引,通過這個索引,能快速取出對應的某條資料記錄,
- 列索引(Columns Names),指向的是每一個Series,
- 行是一條完整資訊記錄,索引在業務上一般不允許重復,好的索引能方便處理資料,重復的索引匯入資料庫可能出現限制,可以設定默認配置,
- 無論是行索引還是列索引,在 Pandas 里其實都是一個** Index 物件,都有類似的屬性和方法**,
- pandas的索引有不同的型別,目的都是為更方便處理資料,
二、創建索引
??源Excel檔案index.xlsx:

①匯入資料時指定索引
- 未指定時,python會自動生成從0開始的行索引,列名默認為第1行
?pandas不知道你實際業務情況,所以只能自動生成0-N的自然索引,
df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx')
df

- 自定義指定
# 指定’姓名‘或’班級‘這一列為行索引
df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx',index_col='姓名')
# df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx',index_col='班級')
df

# 指定’班級‘、’姓名‘這兩列為層級索引MultiIndex
df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx',index_col=[1,0])
df

?也可以根據header引數指定哪行作為列名,或根據names引數自定義列名,具體見:https://www.cnblogs.com/xiaoshun-mjj/p/14538695.html
②匯入資料后指定索引df.set_index()
DataFrame.set_index(keys, drop=True, append=False,
inplace=False, verify_integrity=False)
引數說明:
- keys:列標簽或列標簽/串列/series,需要設定為索引的列;
- drop:是否保留設定索引的原列,默認為True,不保留;
- append:是否保留原索引,默認為False,不保留;
- inplace:輸入布林值,表示當前操作是否對原資料生效,默認為False,
- verify_integrity:檢查新索引的副本,否則,請將檢查推遲到必要時進行,將其設定為false將提高該方法的性能,默認為false,
# 匯入資料時,未指定索引
df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx')
df.set_index('姓名') # 設定姓名為索引
df.set_index(['班級','姓名']) # 設定班級和姓名為索引

df.set_index('姓名',drop=False) # 保留原列
df.set_index('姓名',append=True) # 保留原索引

三、常用的索引屬性
以df.index為例,也適用于 df.columns, 因為兩者都是 index 物件
df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx') # 匯入資料時,未指定索引
df.set_index('姓名',drop=False,inplace=True) # 保留原列,對原資料生效
# 查看索引資訊(值和型別,還有可能有名稱)
df.columns
df.index

df.index.name # 行索引名稱
df.index.dtype # 索引資料型別
df.index.shape # 形狀
df.index.size # 元素數量,行記錄條數
# df.columns.size
df.index.values # 索引的值,array 陣列
# df.index.value_counts() # 去重統計
# df.index.values.tolist() # array 陣列轉換成串列list
df.index.is_unique # 判斷是否有重復,業務上原則一般不會重復,有重復回傳False
四、常用索引方法
一樣適用于 df.columns,
df.columns.isin(['姓名','語文']) # 是否存在,快速查看是否有該列名或行

df.index.nunique() # 不重復值的數量
df.index.sort_values(ascending=False) # 排序,倒序
df.index.to_frame(index=False) # 轉成 DataFrame
df.index.unique() # 去重
df.index.value_counts() # 去重分組統計
df.index.where(df.index=='林*') # 篩選,查看是否由該行記錄
df.index.max() # 最大值
df.index.map(lambda x:x+'_') # 批量處理索引

五、索引重置reset_index()
列可以變成索引,索引也能回復成列,
DataFrame.reset_index(level=None, drop=False,
inplace=False, col_level=0, col_fill='')
引數說明:
- level:數值型別可以為:int、str、tuple或list,默認無,僅從索引中洗掉給定級別,默認情況下移除所有級別,控制了具體要還原的那個等級的索引 ,
- drop:當指定drop=False時,則索引列會被還原為普通列;否則,經設定后的新索引值被會丟棄,默認為False,
- inplace:輸入布林值,表示當前操作是否對原資料生效,默認為False,
- col_level:數值型別為int或str,默認值為0,如果列有多個級別,則確定將標簽插入到哪個級別,默認情況下,它將插入到第一級,
- col_fill:物件,默認‘’,如果列有多個級別,則確定其他級別的命名方式,如果沒有,則重復索引名,
df = pd.read_excel('C:/Users/asus/Desktop/index.xlsx') # 匯入資料時,未指定索引
df = df.set_index(['姓名','班級']) # 設定MultiIndex
df

df.reset_index() # 移除所有層級索引,并把索引還原成列
df.reset_index(drop=True) # 移除所有層級索引,舍棄原索引
df.reset_index(['姓名']) # 只把姓名這一層索引還原層列

六、修改索引值(修改列名)
# 一對一對應修改
df.rename(columns={'數學': 'maths'})
# 也可以通過一些函式進行批量修改
df.rename(lambda x:'t_' + x, axis=1) # 通過lambda運算式批量給列名加前綴
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277980.html
標籤:其他
上一篇:API介面冪問題
下一篇:實操記錄,帶步驟|使用Spring Boot + MyBatis + FreeMarker + Ehcache進行web開發
