DataFrame对象有多种比较方便的索引方式,以下一一进行总结
DataFrame对象为df
1. df[val]
这边注意,返回的是DataFrame的副本,而不是视图
其中val可以是
1. 列名,也就是columns名,可以是单个列或者是由列名组成的列表,如果是单个列名则返回Serie对
象,如果是列表则返回DataFrame对象
2. 分片,用来进行行切片,比如df[:],则会选择所有的行,即使只有一行返回的也是DataFrame对
象,df[:2]选择前两行,这里需要注意,如果说df的index本身就是数值型,比如说是0,1,2,3,
4,5....这样的索引,那么df[:2]选择的将是index为0和1的行,也就是说数字分片优先选择的是行
数而不是行标签。但是对于ix命令来说,df.ix[:2]选择是标签号从开始至2(包括)的行,也就是
上面的0,1,2行
3. boolean数组,这个很好理解,选择boolean数组中为True的值,为被选中的值会被值为NaN
4. 布尔型DataFrame,作用和boolean相似,但是需要该DataFrame和df的columns值相等,否则
会报错
2.df.ix[val]
1. df.ix的功能强大,可以使用标签或者索引数来进行索引操作,val是一个数值的话,那么返回该行
(注意,这里是行,df[val]才是选择列),如df.ix['first']返回索引为first的行,df.ix[0]返
回第一行
2. val不仅可以是数值,还可以是列标签,比如,df.ix['a':'d']意思是选择从标签a到标签d(包
括)的行,也就是不是数值型也可以使用分片了,是不是很方便
3.df.ix[:,val]
第二条是用ix来索引行,那么索引列的操作呢?
该语法的作用是选择单个或者列的子集,可以很明显看出第一项是一个分片操作,那么可以使用df.ix[1:3,'a']来选择第一行和第二行中columns为'a'的值
当然也可以使用标签的分片,都很方便
4.df.loc[]
该方法是用来选择标签值的,比如说df.loc[1:3]语句,可不是选择第二行和第三行,而是选
择index索引值为1,2,3的行(包括3,前面说到了标签的分片和数字的分片不同),注意,此处
是标签,不是行数,这也说明了,.loc[]是根据标签来进行选择的,如果在loc[]的选择范围
内填入了不存在是数值,那么便会报错,如果希望使用索引数字来进行选择呢?可以看下一
个方法,
5.df.iloc[]
看名字可以看出和loc[]的区别,实际看一下效果df.iloc[1:3,2:4]这个选择的范围是,第二行
(第一行是0索引,计算机从0开始计数对吧?),第三行的第二列和第三列的值,给个实例感受
一下
df
e f g
0 NaN 4 1
1 7.0 5 2
2 8.0 6 3
df.iloc[1:,1:]
f g
1 5 2
2 6 3
选择的是从第二行开始的所有行,第二列开始的所有列的值