# pandas的索引index的用途 # 把數據存儲於普通的column列也能用於數據查詢,那使用index有什么好處? # 1、更方便的數據查詢 # 2、使用index可以獲得性能提升 # 3、 自動的數據對其功能 # 4、更多強大的數據結構支持 import pandas as pd # 1 使用index查詢數據 # drop==False,讓索引列保持在columns df.set_index("userId",inplace=True,drop = False) df.head() df.index # 使用index的查詢方法 df.loc[500].head(5) # 使用column的condition查詢方法 df.loc[df["userId"]==500].head() # 2 使用index會提升查詢性能 # 如果index是惟一的,pandas會使用哈希表優化,查詢性能為O(1) # 如果index不是惟一的,但是有序,pandas會使用二分查找算法,查詢性能為O(logN # 如果index是完全隨機的,那么每次查詢都要掃描去哪表,查詢性能為O(N) # 實驗一:完全隨機的順序查詢 # 將數據隨機打散 from sklearn.utils import shuffle df_shuffle = shuffle(df)#打散數據 # 索引是否是遞增的 df_shuffle.index.is_mononic_increasing # 判斷索引是否是唯一的 df_shuffle.index.is_unique # 計時,查詢id ==500數據的性能 %timeit df_shuffle.loc[500] # 實驗二:將index排序后的查詢 df_sorted = df_shuffle.sort_index() df_sorted.head() #索引是否是遞增的 df_sorted.index.is_monotonic_increasing df_sorted.index.is_unique %timeit df_sorted.loc[500] # 3 使用index能自動對齊數據(包括series & dataframe) s1 = pd.Series([1,2,30],index= list("abc")) s2 = pd.Series([2,3,4],index=list("bcd")) s1 + s2 # 4 使用index更多更強大的數據結構支持 # 很多強大的數據結構 # # Categoricallndex ,基於分類數的index,提升性能 # Multilndex , 多維索引,用於group by多維聚合結果等 # Datetimeindex ,時間類型索引,強大的日期和時間的方法支持
好好學習,天天向上