当前位置:首页>综合>正文

“pandas.dataframe”中怎么把列变成索引 如何建立索引?

2023-04-24 17:00:20 互联网 未知 综合

 “pandas.dataframe”中怎么把列变成索引 如何建立索引?

“pandas.dataframe”中怎么把列变成索引?

在dataframe中根据一定的条件,得到符合要求的某行元素所在的位置。

代码如下所示:

[python] view plain copy
df = pd.DataFrame({BoolCol: [1, 2, 3, 3, 4],attr: [22, 33, 22, 44, 66]},  
index=[10,20,30,40,50])  
print(df)  
a = df[(df.BoolCol==3)&(df.attr==22)].index.tolist()  
print(a)  
df如下所示,以上通过选取“BoolCol”取值为3且“attr”取值为22的行,得到该行在df中的位置注意:返回的位置为index列表,根据index的不同而不同,这点易于数组中默认的下标。

[python] view plain copy
BoolCol  attr  
10        1    22  
20        2    33  
30        3    22  
40        3    44  
50        4    66  
[30]

如何建立索引?

Ms中对索引的的一些说法:
1 索引的B-树结构
SQL Server 中的索引是以B-树结构来维护的如图8-1 所示B-树是一个多层次e69da5e6ba90e79fa5e9819331333231386137
自维护的结构一个B-树包括一个顶层称为根节点Root Node 0 到多个中间层
Intermediate 一个底层Level 0 底层中包括若干叶子节点Leaf Node 在图
8-1 中每个方框代表一个索引页索引列的宽度越大B-树的深度越深即层次越多,读取记录所要访问的索引页就越多也就是说数据查询的性能将随索引列层次数目的增
加而降低。
在SQL Server 的数据库中按存储结构的不同将索引分为两类簇索引Clustered
Index 和非簇索引Nonclustered Index
2 簇索引
簇索引对表的物理数据页中的数据按列进行排序然后再重新存储到磁盘上即簇索
引与数据是混为一体的它的叶节点中存储的是实际的数据由于簇索引对表中的数据一
一进行了排序因此用簇索引查找数据很快但由于簇索引将表的所有数据完全重新排列
了它所需要的空间也就特别大大概相当于表中数据所占空间的120% 表的数据行只
能以一种排序方式存储在磁盘上所以一个表只能有一个簇索引
3 非簇索引
非簇索引具有与表的数据完全分离的结构使用非簇索引不用将物理数据页中的数据
按列排序非簇索引的叶节点中存储了组成非簇索引的关键字的值和行定位器行定位器
的结构和存储内容取决于数据的存储方式如果数据是以簇索引方式存储的则行定位器
中存储的是簇索引的索引键如果数据不是以簇索引方式存储的这种方式又称为堆存储
方式Heap Structure 则行定位器存储的是指向数据行的指针非簇索引将行定位器
按关键字的值用一定的方式排序这个顺序与表的行在数据页中的排序是不匹配的
由于非簇索引使用索引页存储因此它比簇索引需要更多的存储空间且检索效率较
低但一个表只能建一个簇索引当用户需要建立多个索引时就需要使用非簇索引了。
Oracle对索引的一些说法:
索引主要用于两个主要目的:
1、快速查询,经常在查询中被引用的索引列可以帮助以最快的速度检索数据。
2、唯一值。
索引中的百分之二十规则:
当被检索行的比例增加时,检索的性能下降,如果你检索表中20%的行,使用索引与不使用索引是一样快的,当超过了神奇的20%,不使用索引会更快一些。
当你创建索引来帮助加速查询时记住这一规则,各个查询从表中选取的行数是不同的,如果你频繁使用某个查询,计算它从表中选取的行数,如果行数比表中总行数的20%多,表上的索引不会提高查询的性能。

oracle 怎么把新增字段设置唯一索引

CREATE UNIQUE INDEX index_name ON --创建唯一索引 索引名 在
table_name ( column_name[,column_name...] ) --表(列1[列2。。。(可选)])
[TABLESAPCE tab_space] -- 索引存放的表空间(可选)

大写的是关键字,小写的是需要修改地方。

pandas中read函数的使用

利用Python的pandas数据结构来读取excel表格的数据,部分代码如下:

#-*- coding:utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt

catering_data="catering_sale.xls"
data=pd.read_excel(catering_data,index_col=u日期)
#读取数据,指定"日期"列为索引列

大多数书上都是这样写的,但是在Python2.7上运行时出现错误。(没有在Python3.x版本试过)
出现了如下问题:
这里写图片描述
使用help(pd.read_excel)发现参数中有必选参数sheetname,加入到函数中,代码如下:

#-*- coding:utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt

catering_data="catering_sale.xls"
data=pd.read_excel(catering_data,sheetname=0,index_col=u日期)

运行成功。
sheetname=0 的意思是:读取xls文件中的第一个表格。(假设文件中有很多个表格)
另外,也可以将文件转换成csv格式,就不需要这个参数了。代码如下:

catering_data="catering_sale.csv"
data=pd.read_csv(catering_data)