01.loc & iloc & ix 区别

当用行号索引的时候, 尽量用 iloc 来进行索引; 而用标签索引的时候用 loc , ix 尽量别用。

使用标签选取数据

df.loc[行标签,列标签]
df.loc['a':'b']#选取ab两行数据
df.loc[:,'one']#选取one列的数据

df.loc的第一个参数是行标签,第二个参数是列标签(可选参数,默认为所有列标签),两个参数既可以是列表也可以是单个字符,如果两个参数都为列表则返回的是DataFrame,否则为Series。

  • loc根据DataFrame的具体标签选取列。
  • iloc根据标签所在位置选取列,从0开始计数。

loc:通过行标签索引行数据

import pandas as pd  
data = [[1,2,3],[4,5,6]]  
index = ['d','e']  
columns=['a','b','c']  
df = pd.DataFrame(data=data, index=index, columns=columns)

Out[3]: 
   a  b  c
d  1  2  3
e  4  5  6

df.loc['d']
Out[4]: 
a    1
b    2
c    3
Name: d, dtype: int64

df.iloc[0]
Out[5]: 
a    1
b    2
c    3
Name: d, dtype: int64

df3.iloc[1]
Out[6]: 
a    4
b    5
c    6
Name: e, dtype: int64

df.loc['d':]
Out[7]: 
   a  b  c
d  1  2  3
e  4  5  6

#loc扩展:索引某行某列
df.loc['d',['b','c']]
Out[8]: 
b    2
c    3
Name: d, dtype: int64

#loc扩展:索引某列
df.loc[:,['c']]
Out[13]: 
   c
d  3
e  6

获取某列数据最直接方式是df.[列标签],但当列标签未知时可以通过这种方式获取列数据。需要注意,dataframe的索引[1:3]是包含1,2,3的,与平时的不同。

iloc:通过行号获取行数据

import pandas as pd  
data = [[1,2,3],[4,5,6]]  
index = ['d','e']  
columns=['a','b','c']  
df = pd.DataFrame(data=data, index=index, columns=columns)

Out[15]: 
   a  b  c
d  1  2  3
e  4  5  6

#要获取哪一行就输入该行数字
df.iloc[1]
Out[17]: 
a    4
b    5
c    6
Name: e, dtype: int64

#通过行标签索引会报错
df3.iloc['a']
TypeError: cannot do positional indexing on 
 
with these indexers [a] of 

#通过行号可以索引多行
df3.iloc[0:]
Out[19]: 
   a  b  c
d  1  2  3
e  4  5  6

#iloc索引列数据
df3.iloc[:,[1]]
Out[21]: 
   b
d  2
e  5

ix:结合前两种的混合索引

import pandas as pd  
data = [[1,2,3],[4,5,6]]  
index = ['d','e']  
columns=['a','b','c']  
df = pd.DataFrame(data=data, index=index, columns=columns)

Out[22]: 
   a  b  c
d  1  2  3
e  4  5  6

#通过行号索引
df.ix[1]
Out[23]: 
a    4
b    5
c    6
Name: e, dtype: int64

#通过行标签索引
df.ix['e']
Out[25]: 
a    4
b    5
c    6
Name: e, dtype: int64

你可能感兴趣的:(01.loc & iloc & ix 区别)