pandas索引的数据查找、排序和去重小结

由于Pandas的索引比较复杂,常常在使用过程中容易搞混,所以整理一份关于索引的查找、排序、去重的总结文档。

import pandas as pd
import numpy as np
#定义DataFrame
dict={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}
df=pd.DataFrame(dict,index=['one','two','three'])
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: right;
}

a b c
one 1 4 7
two 2 5 8
three 3 6 9

1.Series通过索引查找

可用Index ,也可用数字下标

s1=df['b']
s1['two']
s1[['two','one']]  # 用数组列出离散的标签,要用[ ]括起来
s1['two':'three']  # 标签切片
s1[0:2]            # 标号切片的右区间是开的

2.DataFrame通过索引查找

(1) 直接通过列索引取列

df['b']
df[['b','c']]  # 用数组列出离散的标签,要用[ ]括起来

(2) .loc 通过标签索引数据

  • 先写行标签,后写列标签
  • 列举多个列,要用数组,用[ ]括起来
  • 列举切片,则无需用[ ]括起来。注意标签切片的右括号是闭合的
df.loc[['two','one']]   #索引多行,行名用数组
df.loc['two':'three']   #索引多行,行名用切片
df.loc[:,['b','a']] #索引某行多列,列名用数组
df.loc[:,'b':'a']   #索引某行多列,列名用切片

(3) .iloc 通过通过标号获取数据

  • 先写行号,再写列号
  • 可用单值,也可用切片,注意:标号切片的右括号是开区间的
df.iloc[1:3,1:3]

3.索引和列之间的转换

(1) 列-->索引

  • inplace参数可以定义是否覆盖原数据
df.set_index('a', inplace=True)  # inplace=True 会在原变量直接改,没有返回值
df
df1=df.set_index('a', inplace=False)  # inplace=False则有返回值(默认),原变量不变
df1

(2) 索引-->列

  • 索引变成列会排在DataFrame的第一列
df.reset_index(inplace=True)
df

4.利用索引进行排序

  • 通过索引排列,升序排列、不覆盖原数据、如有缺失值则放在前面
df.sort_index(ascending=True, inplace=False, na_position='first')

5.根据索引进行数据去重

  • keep=‘first‘ or ‘last‘,可以选择保留第一条或最后一条
df=df[~df.index.duplicated(keep='first')]

原文地址:https://www.cnblogs.com/laiyaling/p/11793938.html

时间: 2024-10-10 23:10:29

pandas索引的数据查找、排序和去重小结的相关文章

联合索引在B+树上的存储结构及数据查找方式

能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了B+Tree作为索引底层数据结构相对于其他数据结构(二叉树.红黑树.B树)的优势,最后还通过图示的方式描述了索引的存储结构.但都是基于单值索引,由于文章篇幅原因也只是在文末略提了一下联合索引,并没有大篇幅的展开讨论,所以这篇文章就单独去讲一下联合索引在B+树上的存储结构.本文主要讲解的内容有: 联合索引在B+树

pandas学习(创建多层索引、数据重塑与轴向旋转)

pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组,Series也可以创建多层索引. s = Series(np.random.randint(0,150,size=6),index=[['a','a','b','b','c','c'],['期中','期末','期中','期末','期中','期末']]) # 输出 a 期中 59 期末 4

pandas索引index

pandas索引 html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline }

mysql使用索引扫描来做排序

mysql有两种方式可以生成有序的结果,通过排序操作或者按照索引顺序扫描,如果explain的type列的值为index,则说明mysql使用了索引扫描来做排序(不要和extra列的Using index搞混了,那个是使用了覆盖索引查询).扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着的下一条记录,但如果索引不能覆盖查询所需的全部列,那就不得不扫描一条索引记录就回表查询一次对应的整行,这基本上都是随机IO,因此按索引顺序读取数据的速度通常要比顺序地全表扫描慢,尤其是在IO密集型的工作

海量数据查找排序

问题:假设一个文件中有9亿条不重复的9位整数,现在要求对这个文件进行排序. 一般解题思路: 1.将数据导入到内存中 2.将数据进行排序 (比如插入排序.快速排序) 3.将排序好的数据存入文件 难题: 一个整数为4个字节 即使使用数组也需要900,000,000 * 4byte = 3.4G内存 对于32位系统,访问2G以上的内存非常困难,而且一般设备也没有这么多的物理内存 将数据完全导入到内存中的做法不现实 其他解决办法: 1.导入数据库运算 2.分段排序运算 3.使用bit位运算 解决方案一:

DefaultView 的作用(对DataSet查询出的来数据进行排序)

DefaultView 的作用 收藏    一直以来在对数据进行排序, 条件查询都是直接重复构建SQL来进行, 在查询次数和数据量不多的情况下倒没觉得什么, 但慢慢得, 当程序需要对大量数据椐不同条件进行多次查廛或排序时, 使用这种方式显然对程序的性能影响将会是十分明显的, 在网上找了一下, 发现DATAVIEW能很好的解决这个问题, 其提供了一种简单直观的方式来操作数据, 如下面代码: SqlConnection conn = new SqlConnection("server=.;datab

利用索引进行数据查询优化(转载!)

一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引).下面,我们举例来说明一下聚集索引和非聚集索引的区别: 其实,我们的汉语字典的正文本身就是一个 聚集索引.比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以 “z

分块查找(索引顺序表查找)

分块查找:分块查找又称索引顺序查找,它是顺序查找的一种改进方法. 方法描述:将n个数据元素"按块有序"划分为m块(m<=n).每一块中的数据元素不必有序,但块与块之间必须"按块有序",即第1快中的任一元素的关键字都必须小于第2块中任一元素的关键字:而第2块中任一元素又都小于第3块中的任一元素,-- 图示分块如下: 操作步骤: 1.先选取各快中的最大关键字构成一个索引表 2.查找分两部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中:然后在已确定的

Pandas:DataFrame数据的更改、插入新增的列和行

一.更改DataFrame的某些值 1.更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据. 2.需要注意的是,数据更改直接针对DataFrame原数据更改,操作无法撤销,如果做出更改,需要对更改条件做确认或对数据进行备份. 代码: import pandas as pd df1 = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['