热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python数据框切片_[Python]经验总结1:数据框的切片

文章目录原生风格切片单列切片多列切片行pandas风格切片df.loc[indexes,columns]基于行、列的名称切片df.iloc[indexes,colum

文章目录

原生风格

切片单列

切片多列

切片行

pandas 风格切片

df.loc["indexes", "columns"] 基于行、列的名称切片

df.iloc["indexes", "columns"] 基于行、列的索引切片

每个人都知道 Python 是一种高效、简洁、优雅的语言。然而 Python 也有很多坑,现在老宅开一个新系列,分享老宅在学习和实践中总结的经验和教训,不定期分享。

第一个经验就是要吐槽 总结数据框的切片。Python 有很多第三方的模块(比如 pandas 这样的数据科学神器),对提升 Python 的实用性贡献很大。然而模块多就有一个副作用:语法的不一致性。老宅在学习 pandas 的过程中就被数据框切片的复杂语法搞得挠头。

本文参考了 http://chris.friedline.net/2015-12-15-rutgers/lessons/python2/02-index-slice-subset.html,特此致谢。

数据框的切片,是在列表的切片的基础上发展起来的。不过列表是一维,数据框是二维,因此数据框切片有自己独特的方法。所以数据框的切片有两个风格:原生风格和 pandas 风格(这两个风格是老宅自己总结的…)。在总结以前,我们先构建数据集:

>>> import pandas as pd

>>> from sklearn.datasets import load_iris # 载入 iris 数据集模块

>>> iris = pd.DataFrame(load_iris()["data"]) # 载入 iris 数据集并转化为列表

>>> iris.columns = ["sepal_length", "sepal_width",

... "petal_length", "petal_width"] # 定义列名

>>> from string import ascii_lowercase # 载入字母表

>>> idx = []

>>> for i in ascii_lowercase:

... for j in ascii_lowercase:

... idx.append(i + j)

# 创建字母表排列组合

>>> iris.index = idx[:150] # 定义行名

>>> iris.head()

sepal_length

sepal_width

petal_length

petal_width

aa

5.1

3.5

1.4

0.2

ab

4.9

3.0

1.4

0.2

ac

4.7

3.2

1.3

0.2

ad

4.6

3.1

1.5

0.2

ae

5.0

3.6

1.4

0.2

原生风格

切片单列

df.column 方法

直接在数据框后面使用 . 连接列名。例如:

>>> iris.sepal_length[1:5]

ab 4.9

ac 4.7

ad 4.6

ae 5.0

Name: sepal_length, dtype: float64

这个方法不需要用 "" 括上列,非常方便。不过这样有个潜在的局限:如果列名里有空格,这个方法就不好用了,就要用下面的方法。

df["column"] 方法

这个方法的好处是引号内可以有特殊符号,比如空格。这样切片稍微麻烦一点,但是还可以接受。

df[["column"]] 方法

这个方法与上面一样都用来切片单列。有什么不同呢?请看下面的例子:

>>> iris["sepal_length"][1:5]

ab 4.9

ac 4.7

ad 4.6

ae 5.0

Name: sepal_length, dtype: float64

>>> iris[["sepal_length"]][1:5]

sepal_length

ab

4.9

ac

4.7

ad

4.6

ae

5.0

单中括号和双中括号的区别在于单中括号返回的是序列,而双中括号返回的是数据框。

切片多列

df[["column1", "columns2"...]] 方法

因为多个列组合在一起是一个数据框,所以必须使用双中括号来切片。列名要用引号括起来。

df[list] 方法

这里就体现出不一致性了:假如我们先将想要切片的列放入一个列表,就可以使用单中括号,而且不需要使用引号。

>>> lst = ["sepal_length","petal_length"]

>>> iris[lst].head()

sepal_length

petal_length

aa

5.1

1.4

ab

4.9

1.4

ac

4.7

1.3

ad

4.6

1.5

ae

5.0

1.4

切片行

使用索引切片

哪怕数据框的行已经有的自定义索引名,照样可以使用数字 0 - ~ 切片。

>>> iris[1:5]

sepal length

sepal width

petal length

petal width

ab

4.9

3.0

1.4

0.2

ac

4.7

3.2

1.3

0.2

ad

4.6

3.1

1.5

0.2

ae

5.0

3.6

1.4

0.2

使用行名切片

>>> iris["ae":"ag"]

sepal_length

sepal_width

petal_length

petal_width

ae

5.0

3.6

1.4

0.2

af

5.4

3.9

1.7

0.4

ag

4.6

3.4

1.4

0.3

行切片还有一个列切片不具备的功能:切片连续的行。如果数据框的行名和列名不一致,pandas 会自动判断你在切片行还是列。如果一致嘛…pandas 就不知所措了。这时候就要用到下面的 pandas 风格切片。

pandas 风格切片

df.loc[“indexes”, “columns”] 基于行、列的名称切片

注意行和列都是用的复数形式,意味着可以同时切片多行或多列。同时也可以切片范围内的行或列,使用 : 即可。

>>> iris.loc["ae":"ag", ["sepal_length","petal_length"]]

sepal_length

petal_length

ae

5.0

1.4

af

5.4

1.7

ag

4.6

1.4

想切片全部的行或列,只需要单独使用 : 即可。

iris.loc["ae":"ag", :] # 切片全部列

sepal_length

sepal_width

petal_length

petal_width

ae

5.0

3.6

1.4

0.2

af

5.4

3.9

1.7

0.4

ag

4.6

3.4

1.4

0.3

df.iloc[“indexes”, “columns”] 基于行、列的索引切片

也可以基于行或列的数字索引切片,具备 loc 的一切结构和性质。

>>> iris.iloc[1:3, 0:2]

sepal_length

sepal_width

ab

4.9

3.0

ac

4.7

3.2

好了,总结完毕,困觉觉去了~



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
author-avatar
手机用户2602913291
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有