Pandas | 13 索引和選擇數據

Pandas如今支持三種類型的多軸索引;python

編號 索引 描述
1 .loc() 基於標籤
2 .iloc() 基於整數
3 .ix() 基於標籤和整數

 

.loc()

Pandas提供了各類方法來完成基於標籤的索引。 切片時,也包括起始邊界。整數是有效的標籤,但它們是指標籤而不是位置。shell

.loc()具備多種訪問方式,如 -數組

  • 單個標量標籤
  • 標籤列表
  • 切片對象
  • 一個布爾數組

loc須要兩個單/列表/範圍運算符,用","分隔。第一個表示行,第二個表示列。dom

 

示例1spa

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
print(df)
print('\n')

print (df.loc[:,'A'])

輸出結果:code

   A     B      C      D
a   0.128933    1.113168    -2.908401   0.825420
b   -1.386837   0.757495   1.632173     0.293825
c   -0.131808   -1.372547   -0.623156   -0.090892
d   0.849492    -0.065772   -1.255859   2.891958
e   0.515384    0.781924     -0.816875   0.476188
f   1.962588     1.220072     -0.112463   -1.108805
g   -0.893393   -0.346143    -0.757856   -0.871637
h   -1.307739   -0.263241    -1.898776   0.621455對象

 

a    0.128933
b    -1.386837
c    -0.131808
d    0.849492
e    0.515384
f    1.962588
g    -0.893393
h    -1.307739
Name: A, dtype: float64blog

 

示例2索引

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
print (df.loc[:,['A','C']])
輸出結果:
A C a -0.529735 -1.067299 b -2.230089 -1.798575 c 0.685852 0.333387 d 1.061853 0.131853 e 0.990459 0.189966 f 0.057314 -0.370055 g 0.453960 -0.624419 h 0.666668 -0.433971
 

示例3token

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
print (df.loc[['a','b','f','h'],['A','C']])

輸出結果:

A C a -1.959731 0.720956 b 1.318976 0.199987 f -1.117735 -0.181116 h -0.147029 0.027369

示例4

 
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
print (df.loc['a':'h'])          # 沒有寫列標籤,就將全部的列所有輸出
輸出結果:
A B C D a 1.556186 1.765712 1.060657 0.810279 b 1.377965 -0.183283 -0.224379 0.963105 c -0.530016 0.167183 -0.066459 0.074198 d -1.515189 -1.453529 -1.559400 1.072148 e -0.487399 0.436143 -1.045622 -0.029507 f 0.552548 0.410745 0.570222 -0.628133 g 0.865293 -0.638388 0.388827 -0.469282 h -0.690596 1.765139 -0.492070 -0.176074
 

示例5

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
print (df.loc['a']>0)      # 邏輯判斷

輸出結果 -

A False B True C False D True Name: a, dtype: bool
 

.iloc()

Pandas提供了各類方法,以得到純整數索引。像python和numpy同樣,第一個位置是基於0的索引。

各類訪問方式以下 -

  • 整數
  • 整數列表
  • 系列值

 

示例1:默認按行取

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df.iloc[:4])

輸出結果:

A B C D 0 0.277146 0.274234 0.860555 -1.312323 1 -1.064776 2.082030 0.695930 2.409340 2 0.033953 -1.155217 0.113045 -0.028330 3 0.241075 -2.156415 0.939586 -1.670171
 

示例2:帶逗號,則是行列

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df.iloc[:4])
print (df.iloc[1:5, 2:4])
輸出結果:
A B C D 0 1.346210 0.251839 0.975964 0.319049 1 0.459074 0.038155 0.893615 0.659946 2 -1.097043 0.017080 0.869331 -1.443731 3 1.008033 -0.189436 -0.483688 -1.167312
C D 1 0.893615 0.659946 2 0.869331 -1.443731 3 -0.483688 -1.167312 4 1.566395 -1.292206
 

示例3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print (df.iloc[[1, 3, 5], [1, 3]])
print (df.iloc[1:3, :])
print (df.iloc[:,1:3])

輸出結果:

B D 1 0.081257 0.009109 3 1.037680 -1.467327 5 1.106721 0.320468
A B C D 1 -0.133711 0.081257 -0.031869 0.009109 2 0.895576 -0.513450 -0.048573 0.698965
B C 0 0.442735 -0.949859 1 0.081257 -0.031869 2 -0.513450 -0.048573 3 1.037680 -0.801157 4 -0.547456 -0.255016 5 1.106721 0.688142 6 -0.466452 0.219914 7 1.583112 0.982030
 

.ix()

除了基於純標籤和整數以外,Pandas還提供了一種使用.ix()運算符進行選擇和子集化對象的混合方法。

示例1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df.ix[:4])

輸出結果:

A B C D 0 -1.449975 -0.002573 1.349962 0.539765 1 -1.249462 -0.800467 0.483950 0.187853 2 1.361273 -1.893519 0.307613 -0.119003 3 -0.103433 -1.058175 -0.587307 -0.114262 4 -0.612298 0.873136 -0.607457 1.047772
 

示例2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df.ix[:,'A'])
輸出結果:
0 1.539915 1 1.359477 2 0.239694 3 0.563254 4 2.123950 5 0.341554 6 -0.075717 7 -0.606742 Name: A, dtype: float64

 其餘方法

使用符號

使用多軸索引從Pandas對象獲取值可以使用如下符號 -

對象 索引 描述
Series s.loc[indexer] 標量值
DataFrame df.loc[row_index,col_index] 標量對象
Panel p.loc[item_index,major_index, minor_index] p.loc[item_index,major_index, minor_index]

注意 - .iloc().ix()應用相同的索引選項和返回值。

如今來看看如何在DataFrame對象上執行每一個操做。這裏使用基本索引運算符[] -

示例1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df['A'])

輸出結果:

0 0.028277 1 -1.037595 2 -0.563495 3 -1.196961 4 -0.805250 5 -0.911648 6 -0.355171 7 -0.232612 Name: A, dtype: float64
 

示例2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df[['A','B']])

輸出結果:

A B 0 -0.767339 -0.729411 1 -0.563540 -0.639142 2 0.873589 -2.166382 3 0.900330 0.253875 4 -0.520105 0.064438 5 -1.452176 -0.440864 6 -0.291556 -0.861924 7 -1.464235 0.313168
 

示例3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df[2:2])

輸出結果:

Empty DataFrame Columns: [A, B, C, D] Index: []
 

屬性訪問

能夠使用屬性運算符.來選擇列。

示例

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print (df.A)

輸出結果:

0 0.104820 1 -1.206600 2 0.469083 3 -0.821226 4 -1.238865 5 1.083185 6 -0.827833 7 -0.199558 Name: A, dtype: float64 
相關文章
相關標籤/搜索