人生苦短,我用 Python

前文传送门:

小白学 Python 数据分析(1):数据分析基础

小白学 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 上,方便大家取用。

示例代码-Github

示例代码-Gitee

参考

https://www.pypandas.cn/docs/getting_started/10min.html

小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择的更多相关文章

  1. Python数据分析之pandas学习(基础操作)

    一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...

  2. 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

    在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...

  3. 小白学 Python 数据分析(7):Pandas (六)数据导入

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  4. 小白学 Python 数据分析(8):Pandas (七)数据预处理

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  5. 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  6. 小白学 Python 数据分析(10):Pandas (九)数据运算

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  7. 小白学 Python 数据分析(11):Pandas (十)数据分组

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  8. 小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  9. 小白学 Python 数据分析(13):Pandas (十二)数据表拼接

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

随机推荐

  1. map文件分析

    1.MAP文件基本概念 段(section):描述映像文件的代码和数据块 RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码) RW:Read-Write的缩写,主要 ...

  2. LeetCode 第98题--验证二叉搜索树

    1. 题目 2.题目分析与思路 3.代码 1. 题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数.节点的右子树只包含大于当 ...

  3. __new__ 方法

    1.构造方法 实例化过程:构造->初始化 构成方法必须要有返回值,返回给初始化方法的self class A: def __init__(self): self.x = 1 print('ini ...

  4. Qt Installer Framework翻译(3-4)

    更新组件 下图说明了用于更新已安装组件的默认工作流程: 本节使用在macOS上运行的Qt 5维护工具为例,来演示用户如何更新已安装组件. 启动更新程序 用户启动维护工具时,将打开"简介&qu ...

  5. 图解 Kubernetes

    容器 在了解 Kubernetes 之前,让我们先了解一个容器. 因为如果不了解容器就没法聊容器编排. 容器就是...一个你塞入所有材料的容器. "材料"是指你的应用代码.依赖库, ...

  6. .Net Core2.*学习手册

    1.net core 基础知识解析(创建一个.net core网站)(视频录制) 1.1 Startup解析(没写) 1.2 目录结构分析(没写) 1.3 使用静态文件(没写) 1.4 Control ...

  7. arch_遇到的问题

    archlinux安装 wiki安装 可以参考这个来安装 $如果你跟我一样是用校园网安装的$ 记得使用pppoe-setup 来联网 arclinux 图形界面安装 参考 kde图形安装 需要创建一个 ...

  8. C++ 引用分析

    引用 左值引用,建立既存对象的别名 右值引用,可用于为临时对象延长生命周期 转发引用,保持函数实参的类别 悬置引用,对象生命周期已经结束的引用,访问改引用为未定义行为 值类别,左值,纯右值,亡值 st ...

  9. 部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi

    Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL     严重: Error config ...

  10. linux 网络有关的5个命令

    1:ifconfig 2:ifdown & ifup 3:route 4:traceroute 5:iptables 6