Pandas 中的四中索引方式详解
2017-05-24 22:00
411 查看
Pandas 中的四中索引方式详解
总结
默认索引方式需要看传入内容,如果是数字那么就是基于位置的索引,不会返回最后一个元素,如果是传入的标签,那么就是标签的索引,会返回最后一个元素。但是它只能识别其中一种。举个例子,在DataFrame里面会出现即使用标签又使用位置的元素获取方式,此时使用[] 获取元素会出错,因为它要么识别标签要么识别位置,所以这个时候必须使用ix[] 混合索引才能够正确的获取元素。
基于位置索引,获取数字对应的位置的数据,不会包含最后一个数字对应的内容
基于标签的索引,返回标签位对应的数据,会包含最后一个标签对应的内容。注意在Series 以及DataFrame 中默认的行向,列项索引即可以当做标签解析又可以当做位置解析。
混合索引。根据传入内容会进行匹配,先按照标签索引,再按照位置索引返回数据
实例如下:
如获取Series 中的部分数据
输出结果如下:
和预想的一样。使用dict构建Series的时候其中key为标签。可以通过标签索引获取,而直接传递数值会被当做位置索引,所以获取不到数据。
在DataFrame上面的实验如下:
实验结果如下:
和预测结果一样
总结
Pandas 中的四中索引方式详解
第一次使用pandas 对于其中的Series 和DataFrame 的索引弄晕了,所以写了这篇文章详细的分析Pandas中的四中索引方式:1. 默认的索引[] 2.基于位置的索引.iloc 3.基于标签的索引.loc[] 以及混合索引 .ix[]默认索引方式需要看传入内容,如果是数字那么就是基于位置的索引,不会返回最后一个元素,如果是传入的标签,那么就是标签的索引,会返回最后一个元素。但是它只能识别其中一种。举个例子,在DataFrame里面会出现即使用标签又使用位置的元素获取方式,此时使用[] 获取元素会出错,因为它要么识别标签要么识别位置,所以这个时候必须使用ix[] 混合索引才能够正确的获取元素。
基于位置索引,获取数字对应的位置的数据,不会包含最后一个数字对应的内容
基于标签的索引,返回标签位对应的数据,会包含最后一个标签对应的内容。注意在Series 以及DataFrame 中默认的行向,列项索引即可以当做标签解析又可以当做位置解析。
混合索引。根据传入内容会进行匹配,先按照标签索引,再按照位置索引返回数据
实例如下:
如获取Series 中的部分数据
s_obj1 = pd.Series(np.arange(5),index=['a','b','c','d','e']) print s_obj1 print s_obj1['a':'b'] # 使用标签索引 print s_obj1[0:2] # 使用位置索引 dic1 = {2011:'hello',2012:'yes',2013:'fff'} # 此时2011 2012 2013 为标签 s_obj2 = pd.Series(dic1) print s_obj2 print s_obj2[2011:2013] # 没有内容 print s_obj2.loc[2011:2013] # 使用标签索引 print s_obj2.ix[2011:2013] # 使用混合索引返回同样内容,当做标签解析
输出结果如下:
a 0 b 1 c 2 d 3 e 4 dtype: int32 a 0 b 1 dtype: int32 a 0 b 1 dtype: int32 2011 hello 2012 yes 2013 fff dtype: object Series([], dtype: object) 2011 hello 2012 yes 2013 fff dtype: object 2011 hello 2012 yes 2013 fff dtype: object
和预想的一样。使用dict构建Series的时候其中key为标签。可以通过标签索引获取,而直接传递数值会被当做位置索引,所以获取不到数据。
在DataFrame上面的实验如下:
dic2 = { 'A':1, 'B':pd.Series(np.arange(4),index=list(range(4)),dtype='float32'), 'C':'hello', 'D':pd.Timestamp('2017') } df_obj1 = pd.DataFrame(dic2) print df_obj1 # print df_obj1[0:3,0:2]# 报错,无法正常实现分片操作 需要使用df_obj1.loc[0:3,0:2] 成功获取数据 不知道为什么不能够当做位置索引获取数据 print df_obj1[[0,1]] # 使用位置获取不连续索引数据 print df_obj1[[2]] # 如果使用位置索引获取单列(Series) 需要传递list型数据,比较特殊 print df_obj1['C'] # 和上面获取同样内容,使用列标签获取 print df_obj1.ix[0:3,0:2] # 获取四行两列数据 行向索引可以当成标签访问 print df_obj1.iloc[0:3,0:2] # 获取三行两列数据 纯位置索引
实验结果如下:
A B C D 0 1 0.0 hello 2017-01-01 1 1 1.0 hello 2017-01-01 2 1 2.0 hello 2017-01-01 3 1 3.0 hello 2017-01-01 A B 0 1 0.0 1 1 1.0 2 1 2.0 3 1 3.0 C 0 hello 1 hello 2 hello 3 hello 0 hello 1 hello 2 hello 3 hello Name: C, dtype: object A B 0 1 0.0 1 1 1.0 2 1 2.0 3 1 3.0 A B 0 1 0.0 1 1 1.0 2 1 2.0
和预测结果一样
总结
Pandas 是python数据处理中比较重要的工具,利用索引进行数据操作也是非常普遍的。弄清楚其中的索引访问方式还是比较重要的,呵呵。相关文章推荐
- 对pandas的层次索引与取值的新方法详解
- 详解pandas数据结构和索引
- Pandas详解八之ReIndex重新索引
- Spring的注入方式详解
- MySQL查找的方式与索引的效率
- ORACLE的索引和约束详解
- ORACLE的索引和约束详解
- lucene多种搜索方式详解例子
- join 使用详解方式
- ORACLE的索引和约束详解
- 详解ASP.NET 状态管理方式优缺点
- 详解mysql索引总结----mysql索引类型以及创建
- 数据库设计系列11--选择文件组织方式和索引 推荐
- Tomcat通过JNDI方式连接SqlServer数据库 开发JSP详解
- 虚拟机linux NAT方式上网图文详解
- Spring的注入方式详解
- WINCE快捷方式详解
- Oracle 分区索引详解
- Spring的注入方式详解
- 脚本方式添加全文索引