Pandas:Series、DataFrame數據的loc、iloc、ix 查詢 / 讀取


一、DataFrame的數據查詢 / 提取

 

1、對單列、多列進行訪問讀取

     -- 對單列數據的訪問:DataFrame的單列數據為一個Series。根據DataFrame的定義可以知曉DataFrame 是一個帶有標簽的二維數組,每個標簽相當每一列的列名;如:df.a df['a']

     --  對多列數據訪問:訪問DataFrame多列數據可以將多個列索引名稱視為一個列表,df[['a','b']]

 

 2、對多行進行訪問讀取

 (1)如果只是需要訪問DataFrame某幾行數據的實現方式則采用數組的選取方式,使用“:”

 (2)head和tail也可以得到多行數據,但是用這兩種方法得到的數據都是從開始或者末尾獲取的連續數據;默認參數為訪問5行,只要在方法后方的“()”中填入訪問行數即可實現目標行數的查看。

  

3、查看訪問DataFrame中的數據——loc,iloc方法介紹

 

(1)loc方法是針對DataFrame索引名稱的切片方法,如果傳入的不是索引名稱,那么切片操作將無法執行;利用loc方法,能夠實現所有單層索引切片操作。

         loc方法使用方法:DataFrame.loc[ 行索引名稱或條件 , 列索引名稱 ]   # 閉區間(含最后一個值)

(2)iloc和loc區別:是iloc接收的必須是行索引和列索引的位置。

         iloc方法的使用方法:DataFrame.iloc[ 行索引位置 ,  列索引位置 ]   # 開區間(不含最后一個值)

(3)注意點:

         -- 使用loc方法和iloc實現多列切片,其原理的通俗解釋就是將多列的列名或者位置作為一個列表或者數據傳入。

         --  使用loc,iloc方法可以取出DataFrame中的任意數據。

         --  loc內部還可以傳入表達式,結果會返回滿足表達式的所有值。

         - - loc更加靈活多變,代碼的可讀性更高,iloc的代碼簡潔,但可讀性不高。具體在數據分析工作中使用哪一種方法,根據情況而定,大多數時候建議使用loc方法。

         -- 在loc使用的時候內部傳入的行索引名稱如果為一個區間,則前后均為閉區間;iloc方法使用時內部傳入的行索引位置或列索引位置為區間時,則為前閉后開區間。
          


4、查看訪問DataFrame中的數據——切片方法之ix

(1)ix方法更像是loc和iloc兩種切片方法的融合。ix方法在使用時既可以接收索引名稱也可以接收索引位置。

(2)其使用方法:DataFrame.ix[ 行索引的名稱或位置或者條件, 列索引名稱或位置 ]

(3)控制ix方法需要注意以下幾點:

        Ø 使用ix方法時,當索引名稱和位置存在部分重疊時,ix默認優先識別名稱。
        Ø 盡量使用列索引名稱,而非列索引位置,主要用來保證代碼可讀性。
        Ø 使用列索引位置時,需要注解,同樣保證代碼可讀性。
        Ø 除此之外ix方法還有一個缺點,就是在面對數據量巨大的任務的時候,其效率會低於loc和iloc方法,所以在日常的數據分析工作中建議使用loc和iloc方法來執行切片操作。

代碼1:

import pandas as pd

print("-------創建一維Series數據------------")
# 創建方式1:
# s1=pd.Series([90,86,70],index=['leo','kate','john'])
# print(s1)
# 創建方式2:
dict={'leo':90,'kate':86,'john':70}
s1=pd.Series(dict)
print(s1)

print("-----絕對位置查找----")
print(s1[0])

print("-----標簽查找-----")
print(s1['kate'])

print("-----列表標簽查找----")
print(s1[['john','kate']])

print("----條件表達式查找----")
print(s1[s1>80])

 

結果圖:

 

 

 代碼2:

import pandas as pd

print("=========創建一組DataFrame數據---使用date_range創建時間索引=======")
date
=pd.date_range('20100101',periods=6)
df
=pd.DataFrame(np.random.randn(6,4), index=date,
columns=list('abcd')) print(df.head()) print(df.index) # 打印數據框的索引 print(df.values) # 打印數據框內的元素值 print("---------讀取單列、多列-------") print(df.a) print(df['a']) print(df[['a','b']]) # 讀取多列 print("------讀取多行-----------") print(df[0:4]) print(df.head(3)) # 打印前3行數據 print("------讀取多行、多列-----------") print(df.loc['2010-01-01':'2010-01-04',['a','b']]) # loc是閉區間,尾部包含 print(df.iloc[:4,[0,1]]) # iloc是開區間,尾部不包含 print(df.ix[:4,['a','b']]) # ix 是開區間,尾部不包含 print(df.loc[df.index<'20100105',['a','b']]) # loc 第一個參數可以用條件提取

結果圖:

 

 代碼3:

import pandas as pd
# 創建DataFrame
df = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], 
                  columns=['name','gender','age'])
print(df)
print("----------提取多行、多列-----------")
print(df[['gender','age']])
print(df.loc[1:3,['gender','age']])   # loc是閉區間,尾部包含
print(df.iloc[1:3,[1,2]])              # iloc是開區間,尾部不包含
print(df.iloc[:,1:3])
# 讀取第1行到第2行的數據
print(df[1:3])
print(df.iloc[1:3])

#讀取第1行和第3行,第0列到第2列,不包括第二列
print(df.iloc[[1,3],0:2])

#讀取倒數第3行到倒數第1行的數據,iloc不包含最后一行
print(df[-3:-1])
print(df.iloc[-3:-1])

結果圖:

 

 


免責聲明!

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



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