pandas之索引選取


導語
pandas不是像list和numpy一樣傳統的索引,它需要df.函數()來連接
傳統的方式適用於單獨選取dataframe行或者列。

導入數據:

 

1 #導入pandas和numpy庫
2 import pandas as pd
3 import numpy as np
4 from pandas import Series,DataFrame 
5 test=pd.read_excel("/Users/yaozhilin/Downloads/exercise.xlsx",sep="t")
6 test.head(5)#顯示前五行

 

 

 

 

單獨選取行或者列

1 test[:2]#選取行

 

 

 

 

1 test["工單號"].head(3)
0    A12-086
1    A12-087
2    A12-088
Name: 工單號, dtype: object



•loc

基於標簽索引
1、行與列的list或者切片選取(.loc[:,[]]或.loc[[],:]等)
2、行的布爾值篩選與列的list或者切片選取進行條件篩選
注:因為基於標簽索引,所以索引結果為前閉后閉


~行和列的切片或者[]組合選取

 

1 test.loc[:4,["工單號","所屬區域","數量"]]#行-切片,列-list

 

1 test.loc[[1,2,3],["工單號","所屬區域","數量"]]#行-list,列-list

 

 

 

 

~行的布爾值篩選與列的list或者切片選取進行條件篩選

1 test.loc[test["數量"]>=800,["工單號","所屬區域","數量"]]#行-布爾值,列-list

 

 

 

•iloc

iloc:基於位置索引 是傳統的前閉后開

 

正常索引與loc一樣行和列可以隨意切片或者是[]的形式

1 test.iloc[0:3,0:3]

 

 

 

 

 

布爾值索引篩選過濾:

因為loc是直接將標簽和篩選值連在一起可以直接篩選,而iloc是基於位置的篩選不能直接識別篩選值

 

1 test["數量"].values#變為數組獲取值的位置

 

1 test.iloc[test["數量"].values>=800,0:3]

 

 

 

 

多重索引

構建多重索引:

~set_index、reset_index原表數據構建

 

test.set_index( keys,drop=True,append=False, inplace=False,verify_integrity=False)
drop表示設置為新索引的列是否保存在原數據

append表示舊的索引是否保存

1 test.set_index(["所屬區域","產品類別"],drop=True,append=True,inplace=True)
2 test

 

 

 

 

還原

1 test.reset_index(level=[1,2],inplace=True)2 test

 

 

~zip創建

pd.MultiIndex.from_tuples、zip的用法:將兩集合拆包組成新的配對集合

 

1 X=[1,2,3,4]
2 Y=['a','b','c','d']
3 XY=list(zip(X,Y))
4 print(XY)

 

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
1 z1,z2=zip(*XY)
1 z1
(1, 2, 3, 4)

 

 

1 indexs=pd.MultiIndex.from_tuples(XY,names=["first","scend"])
1 df=pd.DataFrame(np.random.randn(4),columns=['A'],index=indexs)
2df

 

 

loc常規按順序索引

1 test.set_index(["所屬區域","產品類別"],drop=True,inplace=True)
2 test.loc[("蘇州","睡袋"),"數量"]#indexs用(),且不能不寫第一索引
所屬區域  產品類別
蘇州    睡袋      120.0
      睡袋      160.0
      睡袋      100.0
      睡袋      360.0
      睡袋      240.0
      睡袋      120.0

.....

注:test.loc[(,"睡袋")]
但是直接跳過第一索引會報錯

可使用slice切片組合使用,但slice使用過程中所有索引與列均要顯示指出

1 test.loc[(slice(None),"睡袋"),:]#冒號不能省略

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM