当用行号索引的时候, 尽量用 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