完全攻略pandas文檔教學 Indexing and Selecting Data
在使用pandas的時候最常使用到的就是索引(index),常常需要在資料表裡找出需要的資料,這時候就需要索引來幫助我們找出我們所需要的資料,在看完文檔後,整理了一下索引的使用方法
可使用的資料類型:Series,DataFrame,Panel
基本的索引:
我們使用[ ]來進行索引,就像下面這樣,(圖一)為我們建立的資料表,(圖二)為選取A欄位的結果
import pandas as pd import numpy as np dates=pd.date_range('1/1/2000',periods=8) df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D']) df['A']
或者可以一次傳入多個欄位
df[['A','B']]
還有另外一種方法可以對資料進行索引,利用屬性 . 來進行索引,比如說像下面這樣:
df.A
但是這種方法限制比較多所以還是用 [ ] 進行索引會比較好,限制如下:
1.索引名稱必須是valid identifier
2.索引名稱不能和python中存在的函數名稱一樣,例:df.min
3.索引名稱不能是index,major_axis,minor_axis,items,labels
上面用 [ ] 和 . 進行索引的方式是比較直覺的方法,但是常常我們並不事先知道資料的類型,運算上會有一些最佳化的限制,所以pandas提供了下面兩種方法:
1.使用.loc[]
這個方法會使用標籤(label)去尋找資料,總共有五種類型的標籤可輸入
(1)單一標籤,例如:’a’,’b’…..
(2)一個清單(list)或者陣列(array),例如:[“a”,”b”,”c”]
(3)切片標籤(slice object with labels),例如:”a”:”f”(兩側皆有包含)
(4)布林值陣列(boolean array)
(5)可調用函數(callable function)
何時會發生Error:當輸入的標籤找不到資料的時候,會出現KeyError
以下介紹幾個例子來讓大家看看
使用單一標籤
df.loc[:,'A']
使用一個陣列去索引
df.loc[:,['A','C']]
使用切片標籤
df.loc[:,'A':'C']
使用布林值陣列
df.loc[:,df.loc['2000-01-01']>0]
使用可調用函數
df.loc[lambda df:df.A>0,:]
當使用loc的切片索引的時候會將切片範圍中的切片包含進來,若索引排序過後,即使切片範圍的兩邊都沒有在資料裡,還是會把範圍內的資料選取出來,反之若沒排序,就會發生KeyError,舉個例子給大家看看:
s=pd.Series(list('abcde'),index=[0,3,2,5,4])
s.loc[3:5]#2被選出來了
將Series排序後在選取
s.sort_index().loc[1:6]#1和6都不在index裡,但是有排序所以把包含裡的都選出來了
2.使用.iloc[]
這個方法會使用整數值去尋找資料,也和.loc一樣有上面這五種類型可以輸入
何時會發生Error:當輸入的整數索引超過資料的索引的時候,會出現IndexError(除了切片索引之外),但是使用.loc時若超過並不會發生Error會把輸入範圍內包含的資料找出來
以下幾個例子給大家看看:
df1=pd.DataFrame(np.random.randn(6,4), index=list(range(0,12,2)), columns=list(range(0,8,2))) df1
單一整數索引
df1.iloc[0]
使用一個陣列去索引
df1.iloc[[1,3,5],[1,3]]
切片索引
df1.iloc[1:5,2:4]
布林值陣列
df1.iloc[:,np.array(df1.iloc[0]>0)]#這裡必須把布林值的Series轉為陣列不然會發生NotImplementedError
注意:在使用loc和iloc時要注意一件事,pandas會先進行行對齊(column alignment)才會將值進行轉換,什麼意思呢?看下面的例子
本來選取A和B行的值是這樣
df[['A','B']]
如果你想要將這兩行的值互換,按照下面這樣做這樣,pandas會先A行和A行對齊,B行和B行對齊,因此並不會改變A行和B行的值
df.loc[:,['B','A']]=df[['A','B']] df[['A','B']]
如果想要將A行和B行的值互換那就必須指定互換的是A行和B行的值,不然pandas會先進行行對齊,值就不會互換
df.loc[:,['B','A']]=df[['A','B']].values df[['A','B']]
那以上就是關於pandas如何選取資料的介紹囉~~~如果有什麼問題歡迎在下方留言,
喜歡我的作品,可以幫我拍拍手!!!
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
- 来自作者