【python数据分析】数据索引的创建,取值,排序

简介: 文章目录索引的创建,取值,排序1.多层索引的创建2.多层索引的取值

索引的创建,取值,排序

1.多层索引的创建

多层索引是Pandas中一个比较核心的概念,允许你在一个轴向上拥有多个索引层级,许多同学不能处理复杂的数据,最大的问题在于没法灵活的处理多层索引。

import pandas as pd
s = pd.Series([1, 2, 3, 4, 5, 6],
              index=[['张三', '张三', '李四', '李四', '王五', '王五'],
                     ['期中', '期末', '期中', '期末', '期中', '期末']])
print(s)

✨效果

张三  期中    1
    期末    2
李四  期中    3
    期末    4
王五  期中    5
    期末    6
dtype: int64

从图中数据可以看出,张三那一列是数据的第一层索引,期中那一列是数据的第二层索引,而第二层索引值是和数据一一对应的。

但是,我们在创建的时候发现,也需要将名字和考试阶段一一对应,才可以。

🚩现在,我们将数据增加几个科目的成绩,演示DataFrame多层索引的创建方法。

由于成绩的数据比较多,我们将使用numpy的随机数方法构建成绩数据。

numpy会在后续中讲解,现在大家先体验一下,如何使用numpy构建实验数据

import pandas as pd
import numpy as np
#size参数是指定生成6行3列的数组
data = np.random.randint(0,100,size=(6,3))
names = ['张三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([names,exam])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
df

✨下面是运行的效果,我用表格形式来为大家展示

Java Web Python
张三 期中 84 35 57
期末 96 36 92
李四 期中 42 5 64
期末 47 55 76
王五 期中 81 34 74
期末 54 81 69

我们虽然成功的创建了DataFrame的多层索引,但是有一个问题,在设置索引的时候会有很多重复的索引值,如何才能简化索引的写法呢?

Pandas为了解决这个问题,提供了一个创建多层索引的构造方法。

pd.MultiIndex.from_product()构建索引的方式

首先,确定每一层索引的值什么,然后以列表的形势传给from_product()方法即可。

import pandas as pd
import numpy as np
data = np.random.randint(0,100,size=(6,3))
names = ['张三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([names,exam])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
print(df)

✨效果

我们成功创建了DataFrame的多层索引,而且你会发现,我们只需要关注每层索引的值都有哪些就可以了。

[names,exam]列表中的位置不同,产生的索引也会不同。

import pandas as pd
import numpy as np
data = np.random.randint(0,100,size=(6,3))
names = ['张三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([exam,names])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
print(df)

✨效果

🚩经过上面的两段代码,下面我们一起总结一下:

第一:from_product([exam,names])会将列表中第一个元素作为最外层索引,依次类推;

第二:列表中元素值的对应关系,如下图:

2.多层索引的取值

创建不是我们的目的,我们的目的是如何从多层索引中获取到我们想要的数据。

看下面的代码

import pandas as pd
s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'],
                                   ['期中','期末','期中','期末','期中','期末']])
print(s)

可以直接使用[]的方式取最外面的一个层级s[‘张三’]

🚩注意:[]取值方式,不可直接使用最外层以外的其他层级,例如:s[‘期末’],并且[‘张三’,‘期末’]他们的顺序不能变。

不知道大家是否还记得loc和iloc的使用?

loc使用的是标签索引,iloc使用的是位置索引。

loc的使用方式和[]的方式基本一样:

但是,iloc的取值并不会受多层索引影响,只会根据数据的位置索引进行取值。

import pandas as pd
import numpy as np
#size参数是指定生成6行3列的数组
data = np.random.randint(0,100,size=(6,3))
names = ['张三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([names,exam])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
df.iloc[0]

✨效果

Java      84
Web       35
Python    57
Name: (张三, 期中), dtype: int32

在对多层索引DataFrame的取值是,我们推荐使用loc()函数。

同时对一二级索引进行检索:

df.loc['张三'].loc['期中']

✨效果

Java      84
Web       35
Python    57
Name: 期中, dtype: int32
df.loc[('张三','期中')]

✨效果

Java      84
Web       35
Python    57
Name: (张三, 期中)
dtype: int32

🚩注意:DataFrame中对行索引的时候和Series有一个同样的注意点,就是无法直接对二级索引直接进行索引,必须让二级索引变成一级索引后才能对其进行索引!

3.多层索引的排序

有时候,我们需要将分组或创建出来的多层索引数据,根据索引值进行排序。

我们先创建一个简单的多层索引数据:

import pandas as pd
data = np.random.randint(0, 100, size=(9, 3))
key1 = ['b', 'c', 'a']
key2 = [2, 1, 3]
index = pd.MultiIndex.from_product([key1, key2])
df = pd.DataFrame(data, index=index, columns=['Java', 'Web', 'Python'])
df

✨效果

Java Web Python
a 2 19 70 14
1 27 6 14
3 93 27 46
b 2 35 88 87
1 23 31 99
3 59 90 17
c 2 73 40 58
1 14 86 87
3 10 5 75

DataFrame按行索引排序的方法是sort_index(),接下来我们看一下sort_index()是如何对多层索引进行排序。

默认状态下的排序

df.sort_index()

✨效果

通过结果可以看出每一层都会根据索引值进行相应的升序排列。

df.sort_index()中的level参数可以指定是否按照指定的层级进行排列,第一层级索引值为0,第二层级索引值为1。

当level=0时,会根据第一层索引值进行降序排序:df.sort_index(level=0, ascending=False)

✨效果

通过上面的几个排序发现,可以通过level设置排序的索引层级,其他层索引也会根据其排序规则进行排序。

当level=1时,会根据第二层索引值进行降序排序:

✨效果

Java Web Python
c 3 10 5 75
b 3 59 90 17
a 3 93 27 46
c 2 14 86 87
b 2 23 31 99
a 2 27 6 14
c 1 73 40 58
b 1 35 88 87
a 1 19 70 14

通过结果可以看出数据会根据第二层索引值进行相应的降序排列,如果索引值相同时会根据其他层索引值排列

相关文章
|
1月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
1093 1
|
1月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
365 0
|
1月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
1月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
2月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
827 4
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
249 2
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
338 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析

推荐镜像

更多