pandas 數據子集的獲取


    有時數據讀入后並不是對整體數據進行分析,而是數據中的部分子集,例如,對於地鐵乘客量可能只關心某些時間段的流量,對於商品的交易可能只需要分析某些顏色的價格變動,對於醫療診斷數據可能只對某個年齡段的人群感興趣等。所以,該如何根據特定的條件實現數據子集的獲取將是本節的主要內容。

     通常,在pandas模塊中實現數據框子集的獲取可以使用iloc,loc和ix三種‘方法’,這三種方法既可以對數據進行篩選,也可以實現變量的挑選,它們的語法可以表示

成【row_select,cols_select】.

   iloc只能通過行號和列號進行數據篩選,我們可以將iloc中的‘i’理解為“integer”,即只能向【rows_select,cols_select】指定整數列表。該索引方式與數組的索引方式類似,都是從0開始,可以間隔取號,對於切片仍然無法取到上限。

  loc要比iloc靈活一些,讀者可以將loc中的“1”理解為“label”,即可以向【rows_select,col_select】指定具體的行標簽和列標簽。注意,這里是標簽不再是索引。而且,還可以將rows_select指定為具體的篩選條件,在iloc中是無法做到的。

  ix是iloc和loc的混合,讀者可以將ix理解為“mix”,該方法吸收了iloc和loc的優點,市數據庫子集的獲取更加靈活。(此方法忽略,最新的模塊好像已經去掉了,編譯的時候警告,待再驗證)

 

如下用具體的代碼來說明iloc和loc二者之間的差異:

import pandas as pd
df1 = pd.DataFrame({'name':['張三','李四','王二','丁一','李五'],
'gender':['男','女','女','女','男'],
'age':[23,26,22,25,27]},columns = ['name','gender','age'])
df1

#去除數據集的中間三行(所有女性),並且返回姓名和年齡兩列
df1.iloc[1:4,[0,2]]
df1.loc[1:3,['name','age']]
# df1.ix[1:3,[0,2]]

out:

 

 

 

 

 

 再繼續研究,將員工的姓名用做行標簽

#將員工的姓名用作行標簽
df2 = df1.set_index('name')
df2
#同樣取出數據集的中間三行
df2.iloc[1:4,:]
df2.loc[['李四','王二','丁一'],:]

out:

 

 

 

 

 

 

很顯然,在實際的學習和工作中,觀測行的篩選很少是通過寫入具體的行索引或行標簽,而是對某些列做條件篩選,進而獲得目標數據.例如,在上面的df1數據集中,如何返回所有男性的姓名和年齡,代碼如下:

df1.loc[df1.gender == '男',['name','age']]

out:

 

 

 

 

   


免責聲明!

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



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