在利用pandas處理資料時loc、iloc、ix對資料的操作很頻繁,所以這裡簡單的介紹一下它們之間的區別和各自的使用。
pandas的索引可歸納為3種
.loc,標籤索引 (location)
.iloc,位置索引 (int-localtion)
.ix,標籤與位置混合索引
對於ix先按標籤索引嘗試操作,然後再按照位置索引嘗試操作
注意dataframe索引時可將其看作ndarray操作
標籤的切片索引是包含末尾位置的
data = pd.dataframe()
a b
0 6 a
1 7 b
2 7 a
3 4 c
4 3 d
in [5]: data['a']
out[5]:
0 6
1 7
2 7
3 4
4 3
name: a, dtype: int32
可以看出pandas的列是優先索引的。
in [8]: data[0:2]
out[8]:
a b
0 6 a
1 7 b
如果我們直接使用切片來選擇,可以看出它是對行的位置索引選擇,並且不包含末尾位置。
in [6]: data.loc[0:2,'a']
out[6]:
0 6
1 7
2 7
使用loc來標籤索引,這裡可以看出使用標籤索引是包含切片末尾位置的,這是因為它將0:2中的0、1、2都當作了行標籤,而不是數字。
in [10]: data.iloc[1:3]
out[10]:
a b
1 7 b
2 7 a
剛才我們說了,iloc它是按照位置來索引的,所以1:3是行的位置索引,並且不包含末為位置
如果我們使用loc標籤索引來選擇不存在的行標籤會怎麼樣?
in [11]: data2 = pd.dataframe(,index=list('abcde'))
in [12]: data2
out[12]:
x y
a 5 1
b 4 2
c 3 3
d 2 4
e 1 5
我們使用loc來選擇不存在的行標籤:
data2.loc[1:3]
typeerror: cannot do slice indexing on with these indexers [1] of
很明顯的報錯資訊,它找不到1、2、3這三個標籤。
同樣再使用iloc會如何:
in [13]: data2.iloc[1:3]
out[13]:
x y
b 4 2
c 3 3
可以正確選出結果。
in [15]: data2.ix[1:3]
out[15]:
x y
b 4 2
c 3 3
ix前面我們說了它是混合索引,並且先按照標籤進行索引,這裡它沒有找到對應標籤,於是以位置進行索引,所以不包含末為位置。
in [16]: data2.ix['b':'c']
out[16]:
x y
b 4 2
c 3 3
看,直接我們使用標籤索引也能找到對應值,並且標籤包含末為位置!
好了以上就是loc、iloc以及ix的簡單使用和區別。
利用它們我們還可以在對行選擇的同時對列進行選擇,達到對資料的篩選目的.。
in [18]: data.loc[1:3,'a']
out[18]:
1 7
2 7
3 4
name: a, dtype: int32
df.loc[df['gender'] == 'male', 'label'] = 0
表示增加'label'列,且當df的'gender'為'male'時,其值賦為0。這在資料分析中將某些列轉換為數值型的常用處理。
pandas中DataFrame mean函式用法
mean 平均數 pandas中的df.mean 函式預設是等價於df.mean 0 即按軸方向求平均,得到每列資料的平均值。相反的df.mean 1 則代表按行方向求平均,得到每行資料的平均值。舉例 我們 首先匯入pandas包 import pandas as pd建立矩陣 首先使用預設方法 會...
Pandas中的分類
一 分類變數的結構 乙個分類變數包括三個部分,元素值 values 分類類別 categories 是否有序 order 從上面可以看出,使用cut函式建立的分類變數預設為有序分類變數 一 獲取分類屬性 a describe方法 該方法描述了乙個分類序列的情況,包括非缺失值個數 元素值類別數 不是分...
Pandas中resample方法詳解
pandas中的resample,重新取樣,是對原樣本重新處理的乙個方法,是乙個對常規時間序列資料重新取樣和頻率轉換的便捷的方法。方法的格式是 dataframe.resample rule how none axis 0 fill method none closed none label non...