小小資料科學家
小小資料科學家

機器學習/深度學習/投資理財/社畜日記 有拍必回~~~歡迎拍手!!!! 我的個人網站(施工中) : https://rgib37190.github.io/ 我的網站程式碼顯示得比較清楚ㄛ~~~如果馬特看不清楚可以前往我的個人網站觀看~~~

完全攻略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如何選取資料的介紹囉~~~如果有什麼問題歡迎在下方留言,

喜歡我的作品,可以幫我拍拍手!!!










CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论