Pandas的索引操作

索引对象Index

1. Series和DataFrame中的索引都是Index对象

示例代码:

  1. print(type(ser_obj.index))
  2. print(type(df_obj2.index))
  3.  
  4. print(df_obj2.index)

运行结果:

  1. <class 'pandas.indexes.range.RangeIndex'>
  2. <class 'pandas.indexes.numeric.Int64Index'>
  3. Int64Index([0, 1, 2, 3], dtype='int64')

2. 索引对象不可变,保证了数据的安全

示例代码:

  1. # 索引对象不可变
  2. df_obj2.index[0] = 2

运行结果:

  1. ---------------------------------------------------------------------------
  2. TypeError Traceback (most recent call last)
  3. <ipython-input-23-7f40a356d7d1> in <module>()
  4. 1 # 索引对象不可变
  5. ----> 2 df_obj2.index[0] = 2
  6.  
  7. /Users/Power/anaconda/lib/python3.6/site-packages/pandas/indexes/base.py in __setitem__(self, key, value)
  8. 1402
  9. 1403 def __setitem__(self, key, value):
  10. -> 1404 raise TypeError("Index does not support mutable operations")
  11. 1405
  12. 1406 def __getitem__(self, key):
  13.  
  14. TypeError: Index does not support mutable operations

常见的Index种类

  • Index,索引
  • Int64Index,整数索引
  • MultiIndex,层级索引
  • DatetimeIndex,时间戳类型

Series索引

1. index 指定行索引名

示例代码:

  1. ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e'])
  2. print(ser_obj.head())

运行结果:

  1. a 0
  2. b 1
  3. c 2
  4. d 3
  5. e 4
  6. dtype: int64

2. 行索引

ser_obj[‘label’], ser_obj[pos]

示例代码:

  1. # 行索引
  2. print(ser_obj['b'])
  3. print(ser_obj[2])

运行结果:

  1. 1
  2. 2

3. 切片索引

ser_obj[2:4], ser_obj[‘label1’: ’label3’]

注意,按索引名切片操作时,是包含终止索引的。

示例代码:

  1. # 切片索引
  2. print(ser_obj[1:3])
  3. print(ser_obj['b':'d'])

运行结果:

  1. b 1
  2. c 2
  3. dtype: int64
  4. b 1
  5. c 2
  6. d 3
  7. dtype: int64

4. 不连续索引

ser_obj[[‘label1’, ’label2’, ‘label3’]]

示例代码:

  1. # 不连续索引
  2. print(ser_obj[[0, 2, 4]])
  3. print(ser_obj[['a', 'e']])

运行结果:

  1. a 0
  2. c 2
  3. e 4
  4. dtype: int64
  5. a 0
  6. e 4
  7. dtype: int64

5. 布尔索引

示例代码:

  1. # 布尔索引
  2. ser_bool = ser_obj > 2
  3. print(ser_bool)
  4. print(ser_obj[ser_bool])
  5.  
  6. print(ser_obj[ser_obj > 2])

运行结果:

  1. a False
  2. b False
  3. c False
  4. d True
  5. e True
  6. dtype: bool
  7. d 3
  8. e 4
  9. dtype: int64
  10. d 3
  11. e 4
  12. dtype: int64

DataFrame索引

1. columns 指定列索引名

示例代码:

  1. import numpy as np
  2.  
  3. df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
  4. print(df_obj.head())

运行结果:

  1. a b c d
  2. 0 -0.241678 0.621589 0.843546 -0.383105
  3. 1 -0.526918 -0.485325 1.124420 -0.653144
  4. 2 -1.074163 0.939324 -0.309822 -0.209149
  5. 3 -0.716816 1.844654 -2.123637 -1.323484
  6. 4 0.368212 -0.910324 0.064703 0.486016

2. 列索引

df_obj[[‘label’]]

示例代码:

  1. # 列索引
  2. print(df_obj['a']) # 返回Series类型
  3. print(df_obj[[0]]) # 返回DataFrame类型
  4. print(type(df_obj[[0]])) # 返回DataFrame类型

运行结果:

  1. 0 -0.241678
  2. 1 -0.526918
  3. 2 -1.074163
  4. 3 -0.716816
  5. 4 0.368212
  6. Name: a, dtype: float64
  7. <class 'pandas.core.frame.DataFrame'>

3. 不连续索引

df_obj[[‘label1’, ‘label2’]]

示例代码:

  1. # 不连续索引
  2. print(df_obj[['a','c']])
  3. print(df_obj[[1, 3]])

运行结果:

  1. a c
  2. 0 -0.241678 0.843546
  3. 1 -0.526918 1.124420
  4. 2 -1.074163 -0.309822
  5. 3 -0.716816 -2.123637
  6. 4 0.368212 0.064703
  7. b d
  8. 0 0.621589 -0.383105
  9. 1 -0.485325 -0.653144
  10. 2 0.939324 -0.209149
  11. 3 1.844654 -1.323484
  12. 4 -0.910324 0.486016

高级索引:标签、位置和混合

Pandas的高级索引有3种

1. loc 标签索引

DataFrame 不能直接切片,可以通过loc来做切片

loc是基于标签名的索引,也就是我们自定义的索引名

示例代码:

  1. # 标签索引 loc
  2. # Series
  3. print(ser_obj['b':'d'])
  4. print(ser_obj.loc['b':'d'])
  5.  
  6. # DataFrame
  7. print(df_obj['a'])
  8.  
  9. # 第一个参数索引行,第二个参数是列
  10. print(df_obj.loc[0:2, 'a'])

运行结果:

  1. b 1
  2. c 2
  3. d 3
  4. dtype: int64
  5. b 1
  6. c 2
  7. d 3
  8. dtype: int64
  9.  
  10. 0 -0.241678
  11. 1 -0.526918
  12. 2 -1.074163
  13. 3 -0.716816
  14. 4 0.368212
  15. Name: a, dtype: float64
  16. 0 -0.241678
  17. 1 -0.526918
  18. 2 -1.074163
  19. Name: a, dtype: float64

2. iloc 位置索引

作用和loc一样,不过是基于索引编号来索引

示例代码:

  1. # 整型位置索引 iloc
  2. # Series
  3. print(ser_obj[1:3])
  4. print(ser_obj.iloc[1:3])
  5.  
  6. # DataFrame
  7. print(df_obj.iloc[0:2, 0]) # 注意和df_obj.loc[0:2, 'a']的区别

运行结果:

  1. b 1
  2. c 2
  3. dtype: int64
  4. b 1
  5. c 2
  6. dtype: int64
  7.  
  8. 0 -0.241678
  9. 1 -0.526918
  10. Name: a, dtype: float64

3. ix 标签与位置混合索引

ix是以上二者的综合,既可以使用索引编号,又可以使用自定义索引,要视情况不同来使用,

如果索引既有数字又有英文,那么这种方式是不建议使用的,容易导致定位的混乱。

示例代码:

  1. # 混合索引 ix
  2. # Series
  3. print(ser_obj.ix[1:3])
  4. print(ser_obj.ix['b':'c'])
  5.  
  6. # DataFrame
  7. print(df_obj.loc[0:2, 'a'])
  8. print(df_obj.ix[0:2, 0])

运行结果:

  1. b 1
  2. c 2
  3. dtype: int64
  4. b 1
  5. c 2
  6. dtype: int64
  7.  
  8. 0 -0.241678
  9. 1 -0.526918
  10. 2 -1.074163
  11. Name: a, dtype: float64

注意

DataFrame索引操作,可将其看作ndarray的索引操作

标签的切片索引是包含末尾位置的

pandas索引操作的更多相关文章

  1. 【python】pandas 索引操作

    选择.修改数据(单层索引) 推荐使用.at..iat..loc..iloc 操作 句法 结果 备注 选择列 df[col] Series 基于列名(列的标签),返回Series 用标签选择行 df.l ...

  2. 数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析

    数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 目录 数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 1. ...

  3. pandas神器操作excel表格大全(数据分析数据预处理)

    使用pandas库操作excel,csv表格操作大全 关注公众号"轻松学编程"了解更多,文末有公众号二维码,可以扫码关注哦. 前言 准备三份csv表格做演示: 成绩表.csv su ...

  4. pandas高级操作

    pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...

  5. 【Python自动化Excel】Python与pandas字符串操作

    Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...

  6. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  7. Elasticsearch-PHP 索引操作(转)

    索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...

  8. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  9. Mysql之表的操作与索引操作

    表的操作: 1.表的创建: create table if not exists table_name(字段定义); 例子: create table if not exists user(id in ...

随机推荐

  1. uva-11020-平衡树

    题目链接https://vjudge.net/problem/UVA-11020 白书例题,依次给出n个点的坐标,定义一个点为优势点当且仅当这个点的左下方区域不包含任何点(但可以与之完全重合):求每加 ...

  2. Python输出中文到文件时的字符编码问题

    今天在使用Python的GUI平台wxPython时,写了一个只有打开.编辑.保存功能的简易笔记本,代码如下: #coding:utf-8 import wx def load(event): f = ...

  3. [置顶] Android ShareSDKQQ 第三方登录so easy?

    昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下,其实都不难的,其实之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceB ...

  4. RAD Studio Mobile Roadmap updated,XE5 will released on next month, Andriod will be supported.

    RAD Studio Mobile Roadmap updated   Embarcadero updated his RAD Studio Mobile Roadmap. This concern ...

  5. Beego的controller怎么用嵌入实现继承问题

    Go Lang是无继承层次的轻量级面向对象编程范式.Go Lang中的接口与实现之间完全是非侵入式的.这种接口实现方式很值得称赞.不但如此,在Go Lang中只有类型嵌入而没有类型继承.这规避了很多与 ...

  6. 人生苦短之我用Python篇(遍历、函数、类)

    #遍历 info = {'key1':'value1','key2':'value2','key3':'value3'} #方式一 for i in info: print(i,info[i]) #方 ...

  7. mysql 视图,触发器,存储

    一.视图 概念:其实就是一个临时表. 视图是一个虚拟表(非真实存在的),其本质是[根据SQL语句获取动态的数据库,并为其命名],用户使用时只需使用[名称]即可获取结果集.就可以当做表来使用. # 1. ...

  8. 基于tcp协议的粘包问题(subprocess、struct)

    要点: 报头  固定长度bytes类型 1.粘包现象 粘包就是在获取数据时,出现数据的内容不是本应该接收的数据,如:对方第一次发送hello,第二次发送world,我放接收时,应该收两次,一次是hel ...

  9. 记录最近工作使用javascript对select[option]的操作

    1: 数据库取值赋予select选项 $(function(){ $("input[name='state'][value='{$store.state}']").attr(&qu ...

  10. 【转】程序员应该了解的——除了coding我们还有很多事要做

    from : http://www.cnblogs.com/lingyun1120/archive/2011/10/09/2203306.html try { if (you.believe(it) ...