小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择

人生苦短,我用 Python
前文传送门:
小白学 Python 数据分析(2):Pandas (一)概述
小白学 Python 数据分析(3):Pandas (二)数据结构 Series
小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame
小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据
引言
上一篇文章我们介绍如何在 Pandas 一些基础的查看数据的操作,但是官方更推荐我们使用 .at、.iat、.loc 和 .iloc 这几个经过 Pandas 优化过的数据访问方法来访问数据。
首先我们还是先创建一个 DataFrame 用作演示,小编偷懒,接着把上一篇的 DataFrame 拷贝过来了,如下:
import numpy as np
import pandas as pd
dates = pd.date_range('20200101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)
DataFrame 是由很多列组成的,其实可以看做是由多个 Series 组成,我们可以单独获取一列直接获得一个 Series ,如下:
# 获取单列,获得 Series
print(df['A'])
# 输出结果
2020-01-01 -0.065477
2020-01-02 -1.089716
2020-01-03 0.049215
2020-01-04 -0.017615
2020-01-05 -0.910402
2020-01-06 -0.008887
Freq: D, Name: A, dtype: float64
接下来我们可以通过 [] 对 DataFrame 进行切片操作,示例如下:
# 行切片
print(df[0:3])
print(df['20200101' : '20200103'])
# 输出结果
A B C D
2020-01-01 -0.065477 1.603827 1.152969 0.742842
2020-01-02 -1.089716 -0.540936 0.456917 0.295272
2020-01-03 0.049215 -1.182454 -0.294177 -0.698877
A B C D
2020-01-01 -0.065477 1.603827 1.152969 0.742842
2020-01-02 -1.089716 -0.540936 0.456917 0.295272
2020-01-03 0.049215 -1.182454 -0.294177 -0.698877
可以看到,我们通过整数或者是 columns 将 DataFrame 进行了行切片。
loc
我们可以通过使用 loc 进行 column 名和 index 名定位。
比如我们通过 column 提取出一行数据,如下:
# 用标签提取一行数据
print(df.loc[dates[0]])
# 输出结果
A -0.065477
B 1.603827
C 1.152969
D 0.742842
Name: 2020-01-01 00:00:00, dtype: float64
注意,这里的 dates 是我们在最前面生成的一个数组,这里的写法同样可以替换成 df.loc['20200101'] 。
同样我们可以通过切片的方式获取指定某几行的数据,如下:
# 用标签提取多列数据
print(df.loc[:, ['A', 'B']])
# 输出结果
A B
2020-01-01 -0.065477 1.603827
2020-01-02 -1.089716 -0.540936
2020-01-03 0.049215 -1.182454
2020-01-04 -0.017615 -0.777637
2020-01-05 -0.910402 -0.173959
2020-01-06 -0.008887 0.525035
# 用标签进行切片操作,同时制定行与列的结束点
print(df.loc['20200101':'20200103', ['A', 'B']])
# 输出结果
A B
2020-01-01 -0.065477 1.603827
2020-01-02 -1.089716 -0.540936
2020-01-03 0.049215 -1.182454
# 返回一行中的两列
print(df.loc['20200101', ['A', 'B']])
# 输出结果
A -0.065477
B 1.603827
Name: 2020-01-01 00:00:00, dtype: float64
那么我如果想获得一个指定位置的数据怎么办呢?当我们把 DataFrame 想像成为一个坐标系的时候,当然是指定横纵坐标可以确定一个唯一的点啊,如下:
# 获取某个标量值
print(df.loc[dates[0], 'A'])
# 输出结果
-0.06547653622759132
iloc
iloc 和上面的 loc 很像, loc 主要是通过行进行索引定位,而 iloc 是通过 index 也就是列进行索引定位,所以参数是整型, iloc 的英文全称为 index locate 。
先看一个简单的示例,我们先用整数选择出其中的一列:
# 用整数位置选择
print(df.iloc[3])
# 输出结果
A -0.017615
B -0.777637
C 0.824364
D 0.210244
Name: 2020-01-04 00:00:00, dtype: float64
这里我们还可以加上切片进行选择:
# 使用整数按行和列进行切片操作
print(df.iloc[3:5, 0:2])
# 输出结果
A B
2020-01-04 -0.017615 -0.777637
2020-01-05 -0.910402 -0.173959
# 用整数列表按位置切片
print(df.iloc[[1, 2, 4], [0, 2]])
# 输出结果
A C
2020-01-02 -1.089716 0.456917
2020-01-03 0.049215 -0.294177
2020-01-05 -0.910402 -1.140222
# 整行切片
print(df.iloc[1:3, :])
# 输出结果
A B C D
2020-01-02 -1.089716 -0.540936 0.456917 0.295272
2020-01-03 0.049215 -1.182454 -0.294177 -0.698877
# 整列切片
print(df.iloc[:, 1:3])
# 输出结果
B C
2020-01-01 1.603827 1.152969
2020-01-02 -0.540936 0.456917
2020-01-03 -1.182454 -0.294177
2020-01-04 -0.777637 0.824364
2020-01-05 -0.173959 -1.140222
2020-01-06 0.525035 -1.076101
同样,我们通过 iloc 也可以直接选择一个标量值:
# 获取某个标量值 同上
print(df.iloc[1, 1])
# 结果如下
-0.540936460611594
at 和 iat
at 和 iat 都是用来访问单个元素的,而且他们的访问速度要快于上面的 loc 和 iloc 。
at 使用方法与 loc 类似,示例如下:
print(df.at[dates[0], 'A'])
# 输出结果
-0.06547653622759132
iat 对于 iloc 的关系就像 at 对于 loc 的关系,示例如下:
print(df.iat[1, 1])
# 输出结果
-0.540936460611594
其他
我们还可以使用一些判断条件来选择数据,如用单列的值选择数据,示例如下:
print(df[df.A > 0])
# 输出结果
A B C D
2020-01-03 0.049215 -1.182454 -0.294177 -0.698877
上面这个示例是输出的所有 A 列大于 0 的数据。
还有直接使用整个 df 做判断的,示例如下:
print(df[df < 0])
# 输出结果
A B C D
2020-01-01 -0.065477 NaN NaN NaN
2020-01-02 -1.089716 -0.540936 NaN NaN
2020-01-03 NaN -1.182454 -0.294177 -0.698877
2020-01-04 -0.017615 -0.777637 NaN NaN
2020-01-05 -0.910402 -0.173959 -1.140222 -0.662615
2020-01-06 -0.008887 NaN -1.076101 -0.862407
示例代码
老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。
参考
https://www.pypandas.cn/docs/getting_started/10min.html
小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择的更多相关文章
- Python数据分析之pandas学习(基础操作)
一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...
- 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据
在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...
- 小白学 Python 数据分析(7):Pandas (六)数据导入
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(8):Pandas (七)数据预处理
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(10):Pandas (九)数据运算
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(11):Pandas (十)数据分组
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(13):Pandas (十二)数据表拼接
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
随机推荐
- 值得收藏!my.cnf配置文档详解
MySql对于开发人员来说应该都比较熟悉,不管是小白还是老码农应该都能熟练使用.但是要说到的各种参数的配置,我敢说大部分人并不是很熟悉,当我们需要优化mysql,改变某项参数的时候.还是要到处在网上查 ...
- C语言之枚举数据类型
枚举数据类型概述:1.枚举类型是C语言的一种构造类型.它用于声明一组命名的常数,2.当一个变量有几种可能的取值时,可以将它定义为枚举类型.3.枚举类型是由用户自定义的由多个命名枚举常量构成的类型,其声 ...
- MySQL快速回顾:高级查询操作
8.1 排序数据 检索出的数据并不是以纯粹的随机顺序显示的.如果不排序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到M ...
- ThinkPad全家族机型对比
如图所示
- [转载收藏]C#基础知识梳理系列十一:垃圾回收机制
摘 要 基于.NET平台的开发语言中,最让开发人员爽的一点就是垃圾回收处理机制,在编码过程中,终于可以解放你的双手来关注更重要的事情.很多的资料中在讲到.NET中的垃圾回收机制时都说"CLR ...
- 嗯 想写个demo 苦于没数据
step 1: 来点数据: 各种数据 随你便了. step 2: 来个 服务端 step 3 : 客户端 调用
- CTRL-IKun团队选题报告
1. 团队简介 1.1团队名称:CTRL-IKun 1.2队员学号列表 姓名 学号列表 廖志丹 201731032125 王川 201731021132 江天宇 201731024132 张微玖 20 ...
- Python学习,第七课 - 文件操作
Python中对文件的相关操作详解 文件的操作在今后的Python开发中也是使用非常频繁的. 先说下对文件操作的流程 打开文件,得到文件的一个句柄,赋值给一个变量 然后通过句柄对文件进行操作(内容的增 ...
- Git详解之特殊配置与钩子应用
前言 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求. ...
- JSTL (标准标签库)
JSTL(标准标签库) 作用: Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性.维护性和方便性. 使用方法:J ...