Python3——pandas的DataFrame(.ix .loc .iloc)取數據的坑~

版權聲明:本文爲博主辛苦碼出來滴~,才疏學淺,如有不對盡請指正,未經博主允許不得轉載。

pandas 是數據處理中最常用的工具之一,有時候我們不需要用整個DataFrame裏的數據,而是隻想取各別的行或列,這時候可以用.ix .loc .iloc來實現,不過這三種在使用的時候要特別注意以下情況:

  1. 數據的index是默認值,也就是0,1,……

  此時用data.ix[0:n, 列名或數字] 或data.loc[0:n, 列名] 取數據時,是可以取到index=n這列的,因爲此時0:n指的不是下標,而是index的名稱。
  不過data.iloc[0:n, 數字或data.columns==‘列名’]只能取到前n行,也就是index=n-1的行。

import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(0, 25).reshape(5, 5), columns=list('abcde'))
print('原始數據\n', data)
print('\n.ix 取數據')
print(data.ix[0:3, data.columns != 'b'])  # 注意:index名稱 0:3 可以取到名稱3

print('\n.loc 取數據')
print(data.loc[0:3, data.columns != 'b'])  # 注意:index名稱 0:3 可以取到名稱3

print('\n.iloc 取數據')
print(data.iloc[0:3, data.columns != 'b'])  # 下標 0:3 取不到3
原始數據
     a   b   c   d   e
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24

.ix 取數據
    a   c   d   e
0   0   2   3   4
1   5   7   8   9
2  10  12  13  14
3  15  17  18  19

.loc 取數據
    a   c   d   e
0   0   2   3   4
1   5   7   8   9
2  10  12  13  14
3  15  17  18  19

.iloc 取數據
    a   c   d   e
0   0   2   3   4
1   5   7   8   9
2  10  12  13  14
  1. 數據的index是指定名稱的值
      此時用data.ix[0:n,列名或數字] 取數據時與data.iloc[0:n,數字或data.columns==‘列名’]一樣,是取不到index=n這列的,因爲此時0:n指的是下標,只能取到前n行。
      此時data.loc[0:n, 列名]不能這樣用,應該寫對應的index指定的值。
data = pd.DataFrame(np.arange(0, 25).reshape(5, 5), columns=list('abcde'), index=list('ABCDE'))
print('原始數據\n', data)
print('\n.ix 取數據')
print(data.ix[0:3, 1])  # 注意:index下標 0:3 取不到3

print('\n.loc 取數據')
print(data.loc[['A', 'B'], data.columns == 'b'])  # 注意:必須用index名稱

print('\n.iloc 取數據')
print(data.iloc[0:3, 1])  # 下標 0:3 取不到3
原始數據
     a   b   c   d   e
A   0   1   2   3   4
B   5   6   7   8   9
C  10  11  12  13  14
D  15  16  17  18  19
E  20  21  22  23  24

.ix 取數據
    b
A   1
B   6
C  11

.loc 取數據
   b
A  1
B  6

.iloc 取數據
    b
A   1
B   6
C  11

總的來說,哪種方法用的慣就用哪種,就是需要注意.ix 和.loc的坑,以下是我按自己的使用情況做的總結:

方法 適用情況
.ix 適用於列數較多時,想取的列比較分散的情況;如果有複雜的index值且行數較多時,也適用於想取的行比較分散的情況
.loc 適用於列數較多時,想取的列比較分散的情況; 如果有簡單index值且行數較多時,也適用於想取的行比較分散的情況
.iloc 適用於用行列下標取值的情況
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章