Python 数据处理(二十九)—— MultiIndex 高级索引 *** 作

Python 数据处理(二十九)—— MultiIndex 高级索引 *** 作,第1张

从语法上将 MultiIndex 与 loc 集成在高级索引中是有些挑战性。通常, MultiIndex 的键采用元组的形式。例如

注意 : 虽然也可以使用 dfloc['bar', 'two'] ,但这种简写的符号通常会导致歧义

如果你还想用 loc 索引某一列,你必须像这样使用一个元组

想要获取第一个级别的某一标签的所有元素,并不需要传递元组,例如

而不是使用 dfloc[('bar',),] (等价于 dfloc['bar',] )

当然,也可以进行切片

通过提供一个元组切片,选择范围内的值

传递一个标签或元组列表的工作原理类似于 reindex

需要注意的是,在 pandas 中,当涉及到索引时,元组和列表的处理方式并不相同。

元组被解释为一个多级键,而列表则用来指定多个键。或者换句话说,元组是横向的,列表是纵向的

您可以通过提供多个索引器来对 MultiIndex 进行切片

可以使用 slice(None) 选择该级别的所有内容,没有指定索引的级别默认为 slice(None)

通常,切片的两段都会包括在内,因为这是标签索引

在使用 loc 的时候,最好同时指定索引(行)和标签(列),因为在某些情况下,传递的索引可能会被解析为两个轴而不是 MultiIndex

你应该使用

而不是

例如

使用切片,列表和标签的基本 MultiIndex 切片 *** 作

你可以使用 pandasIndexSlice 来让 : 语法显得更自然一些,而不是使用 slice(None)

可以使用这种方法在多个轴同时进行相当复杂的选择

您可以使用布尔索引器来进行与值相关的选择

您还可以为 loc 指定 axis 参数,以在某一个轴上传递切片

此外,您可以使用以下方法设置这些值

也可以在等号右边使用可对齐对象

DataFrame 的 xs() 方法还接受一个 level 参数,以便更容易在 MultiIndex 的特定级别上选择数据

使用切片

您还可以为 xs 提供 axis 参数来选择列

使用切片

xs 还允许使用多个键进行选择

使用切片

您可以将 drop_level=False 传递给 xs ,以保留所选择的级别

使用 drop_level=True (默认值)与上面的结果比较

在 pandas 对象的 reindex() 和 align() 方法中使用 level 参数,可以在一个级别上广播值

swaplevel() 方法可以切换两个级别的顺序

reorder_levels() 方法是 swaplevel 方法的推广,允许你在一个步骤中排列分层索引级别

rename() 方法可用于重命名 MultiIndex 的标签,通常用于重命名 DataFrame 的列

rename 的 columns 参数允许指定需要重命名的列的字典

这个方法也可以用来重命名 DataFrame 主索引的特定标签

rename_axis() 方法用于重命名 Index 或 MultiIndex 的名称。

特别地,可以指定 MultiIndex 的级别名称,可以使用 reset_index() 将 MultiIndex 移动到列

注意 : DataFrame 的列是一个索引,因此使用 rename_axis 和 columns 参数可以改变该索引的名称

rename 和 rename_axis 都支持指定字典、 Series 或映射函数来将标签/名称映射到新值

当直接使用 Index 对象而不是通过 DataFrame 工作时,可以使用 Indexset_names() 来更改名称

您不能通过 level 设置 MultiIndex 的名称

使用 Indexset_names() 替代

列表(list)是Python中一个非常重要的类型,用于管理一组数据,列表的形式如下所示

country = ['China', 'Germany', 'Russia', 'America']

1)数据包含在引号中,Python中单引号和双引号具有相同的作用

2)使用逗号分隔数据,整个列表包含在一个中括号中

3)适用赋值 *** 作符将一个列表赋值给一个变量名如上述例子中的“country”, Python的变量名不需要声明类型

country = []

列表不仅可以存放字符串这样的数据,还可以存放混合类型的数据,例如在列表中存储列表

除了列表外还可以存储字典和元组,字典和元组另作介绍

列表可以像数组那样通过下标获取列表中的数据,数据类型---字符串

列表可以适用冒号“:” *** 作符选取列表中的一部分数据,选取出的数据成为切片,实际上是字列表,但这些数据需要是连续的。

此外数据可以正向取如示例中的“0 : 2”得到列表['China', 'Germany'], 也可以反向取如“-2:-1”

需要注意的是即使切片只取一个数据得到的也是一个列表,而不是一个字符串,与使用索引得到的数据是不同的

添加数据可以使用 insert() 和 append() 两种方法,如下所示:

insert() 第一个参数确定插入的位置,在这个位置之后插入需要插入的数据, append() 将数据添加到列表的尾部

从列表中找出某个值第一个匹配项的索引位置

只能查找第一层数据,如果差列表中的列表,需要将列表全部输入。函数中的start和stop用于确定搜索范围

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

移除列表中某个值的第一个匹配项

反向列表中元素

对原列表进行排序

OLTP(on-linetransactionprocessing)翻译为联机事务处理。OLAP(On-LineAnalyticalProcessing)翻译为联机分析处理。

OLTP主要用来记录某类业务事件的发生,如购买行为,当行为产生后,系统会记录是谁在何时何地做了何事,这样的一行(或多行)数据会以增删改的方式在数据库中进行数据的更新处理 *** 作,要求实时性高、稳定性强、确保数据及时更新成功,像公司常见的业务系统如ERP,CRM,OA等系统都属于OLTP。

当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做OLAP了。

因为OLTP所产生的业务数据分散在不同的业务系统中,而OLAP往往需要将不同的业务数据集中到一起进行统一综合的分析,这时候就需要根据业务分析需求做对应的数据清洗后存储在数据仓库中,然后由数据仓库来统一提供OLAP分析。所以我们常说OLTP是数据库的应用,OLAP是数据仓库的应用,下面用一张图来简要对比。

1、适用人员不同:OLTP主要供基层人员使用,进行一线业务 *** 作。OLAP则是探索并挖掘数据价值,作为企业高层进行决策的参考。

2、面向内容不同:OLTP面向应用,OLAP面向主题;

4、数据特点不同:OLTP的数据特点是当前的、最新的、细节的,二维的、分立的;而OLTP则是历史的,聚集的,多维的,集成的,统一的;

5、存取能力不同:OLTP可以读/写数十条记录,而OLAP则可以读上百万条记录;

6、工作事件的复杂度不同:OLTP执行的是简单的事务,而OLAP执行的是复杂任务;

7、可承载用户数量不同:OLTP的可承载用户数量为上千个,而OLAP则是上百万个;

8、DB大小不同:OLTP的DB大小为100GB,而OLAP则可以达到100TB;

9、执行时间要求不同:OLTP具有实时性,OLAP对时间的要求不严格。

扩展资料:

OLTP与OLAP的实际应用

OLAP工具是针对特定问题的联机数据访问与分析。它通过多维的方式对数据进行分析、查询和报表。维是人们观察数据的特定角度。

例如,一个企业在考虑产品的销售情况时,通常从时间、地区和产品的不同角度来深入观察产品的销售情况。这里的时间、地区和产品就是维。

这些维的不同组合和所考察的度量指标构成的多维数组则是OLAP分析的基础,可形式化表示为(维1,维2,,维n,度量指标),如(地区、时间、产品、销售额)。

多维分析是指对以多维形式组织起来的数据采取切片(Slice)、切块(Dice)、钻取(Drill-down和Roll-up)、旋转(Pivot)等各种分析动作,以求剖析数据,使用户能从多个角度、多侧面地观察数据库中的数据,从而深入理解包含在数据中的信息。

应用OLTP,就必须重新定义OLTP在企业信息化体系结构中的地位。OLTP不再只是一套能处理订单的老式应用程序。对典型的OLTP系统处理的大规模数据流更新进行同时分析,这种情况很罕见,因为一般认为这不是OLTP的目的。

数据仓库更新固有的延迟阻碍着对最新数据的近实时分析。组织如果要对于数据的变化迅速作出反应,IT部门就必须让OLTP产生比以往更大的作用。

虚拟现实内容模拟了人眼的视觉体验:

我们可以用一个小实验来感受一下人眼的功能:

1当你分别遮住一只眼睛,用另一只眼睛看你的左手时,你的两只眼睛各自看到的图像,会有一些微小的差别。这个就叫做人眼的双目视差。

2当你把手机放在面前,先把头歪到左边,再把头歪到右边时,你的眼睛看到的就分别是手机的左边框和右边框。这个叫做人眼的移动视差。

3而当你摊开两只手,先盯着左手看,再盯着右手看,也就是眼睛聚焦到不同的手上时,会依次看到左手清晰右手模糊,以及左手模糊右手清晰的图像。这是人眼的变焦功能。

正是因为人眼天然拥有以上这些视觉差异和变焦功能,你眼前的这个场景,才能在大脑的加工后变得立体和纵深;

而传统相机的二维成像技术,和人眼这些复杂功能比起来,简直被甩开了好几条街。

那么,人眼这么复杂的视觉体验,虚拟现实又是怎么模仿出来的呢?

我们再来做一个实验:

首先,如果把相机放在一个点上,拍摄广场上一远一近的两个人。那么当镜头对焦在不同的人身上时,就能拍到2张只有一个人清晰,而其他部分虚化的照片。

接着,如果在这两个人的斜后方再加一个人,整个场景里就出现了3个远近不同的人。那么镜头对焦在不同的人身上时,我们就能拍到3张只有一个人清晰,而其他部分虚化的照片。

而如果再不断地向斜后方增加人数,那么这个相机就能拍摄出无数张只有一个人清晰,而其他部分虚化的照片。

现在,见证奇迹的时刻来了。

如果把这些照片叠在一起,它们实际上就粗略地组成了在这个角度上,“很多人站在广场上”,这样的一个立体场景;

换句话说,相机在这个点上能够“看”到的整个立体的场景,可以被竖着切成无数张切片,也就是这无数张照片。

而如果我们再模仿人的双眼,以及在不同位置上的视角,再把眼前的场景从各个角度都切片,那么整个场景里所有角度的切片叠加在一起,就最终组成了一个完整的立体场景。

而就像我们刚才说的,传统相机不管怎么变焦,都只能采集整个立体场景中的这一片切片,或那一片切片;

但现在的虚拟现实,却可以通过采集整个场景中的很多切片,甚至是所有切片,来生成一个模拟人眼视觉的切片数据库;

这个数据库中的图像经过处理,就能在显示屏上再复现出立体的场景了。

另外,现在最先进的显示技术,甚至已经可以根据你眼睛和身体的动作,实时切换数据库中的切片——

不管你在某个瞬间是移动了位置,还是眼睛切换了焦点,计算机都可以通过算法,筛选出你做出这个动作的瞬间应该看到的那一个切片,并且经过快速加工,把那个切片呈现在你眼前的显示屏上。

也就是说,随着你的动作变化,你的眼睛在这一瞬间该看到哪张切片,虚拟现实就给你看哪张切片。

这样,你看着眼前这些人工加工的图像,就会感觉像在现实世界中一样了。

除了虚拟现实以外,你应该还经常听到一个词,叫增强现实。

所谓增强现实(AR),就是你看得到眼前的现实世界,但这个现实世界活生生被叠加上了虚拟的元素。

没错,今年过年支付宝推出的AR实景红包,就是基于(简易版的)增强现实技术。

所以,虚拟现实和增强现实就像它们的名字一样,一个是完全脱离了现实的虚拟世界,一个是现实世界的加强版。

每台服务器中数据是不一致的。

1、集群技术主要是解决单一服务器计算能力、存储能力、网络能力等指标低下的问题;

2、集群环境的数据库是将数据切片后分散存储到每一个服务器,每个数据库服务器只保存整体数据库的一部分;

3、集群数据库后每一台主机对数据分别计算合并结果,最后返回给客户;

这样的数据库有:MySQL集群、postgresql 、greenplum等。

首先换数据库,MySQL处理这个数量级数据比较吃力。推荐你用DB2 或ORACLE

如果不能换,检查一下存储引擎用InnoDB,如果是,检查

innodb_flush_log_at_trx_commit 这个选项,是否是1

如果是1 用SET AUTOCOMMIT = 0 ,提高数据修改速度

PHP优化需要

MySQL Slow Log 分析工具分析日志:mysqldumpslow或mysqlsla比较不错。

Explain/ DESC 分析SQL 的执行情况和SHOW PROCESSLIST

使用SHOW PROCESSLIST 看是否有锁表情况,

设置 mycnf 中的long-query-time 和log-slow-queries 记录服务器那些SQL执行速度比较慢

根据上述情况查看对对应的SQL语句进行优化

优化服务器性能,用RAID5(SAN),加内存本身的升级,提高硬盘I/O性能。

数据库总体性能优化:

数据表最好能拆成小表。

数据库切片,分到不用的服务器上,

数据库访问性能优化

修改mycnf, 下面是影响比较大的:

innodb_flush_log_at_trx_commit 设置为0

如果比下面值大就不用调整了:

query_cache_size 设置为16M

sort_buffer_size 设置为16M

record_buffer 设置为16M

key_buffer_size 设置为8M

innodb_buffer_pool_size 设置为32M

下面是建议设置的

table_cache 设置为512

read_buffer_size 设置为16M

myisam_sort_buffer_size设置为16M

innodb_additional_mem_pool_size 设置为128M

innodb_log_file_size 设置为256M

innodb_log_buffer_size设置为8M

数据库表优化,

1 建立相应的INDEX

2 统一编码,MySQL的默认编码是Latin1,不支持中文,需要把数据库的默认编码修改为gbk或者utf8

show variables like 'character%' 查看

另外表的编码也要与数据库统一

以上就是关于Python 数据处理(二十九)—— MultiIndex 高级索引 *** 作全部的内容,包括:Python 数据处理(二十九)—— MultiIndex 高级索引 *** 作、Python中的列表、OLTP和OLAP有何区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9657678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存