pandas 选取行和列的方法

2023-10-27

本文介绍在 pandas 中如何读取数据行列的方法。数据由组成,在数据库中,行被称作记录 (record),列被称作字段 (field)。回顾一下我们对记录和字段的获取方式:比较常见的,字段根据名称获取,记录根据筛选条件获取。比如获取 student_idstudnent_name 两个字段;记录筛选,比如语文和数学考试分数都大于 90 的所有记录。对于熟悉 SQL 语句的人来说,就是下面的语句:

select student_id, student_name
from exam_scores
where chinese >= 90 and math >= 90

上面的 SQL 语句表示从考试成绩表 (exam_scores) 中,筛选出语文和数学都大于或等于 90 分的所有学生 id 和 name。学习 pandas 数据获取,推荐这种以数据结果为目标导向的方式,而不是被动的按 pandas 提供的 loc, iloc的语法中,一条条顺序学习。

本篇我们要分析的关于销售数量和金额的一组数据,数据存放在 csv 文件中。示例数据我在 github 上放了一份,方便大家对照练习。

选择列

选择单列

以下两种方法返回 Series 类型:

import pandas as pd
df = pd.read_csv('sample-salesv3.csv')

df.name
# 或者
df['name']

如果需要返回 DataFrame 格式,使用 list 作为参数。为了方便说明,给出在 jupyter notebook 中显示的界面。

选择多列

如果需要选取多列,传给 DataFrame 一个包含列名的 list

选择行

基于条件选择

假设我们要筛选 quantity < 0 的所有记录:

按多条件筛选的处理方式。假设想筛选 quantity < 0 并且 unit price > 50 的所有记录:

代码:

criteria = (df['quantity'] < 0) & (df['unit price'] > 50)
df[criteria].head()

在 pandas 中,AND 条件的运算符为 & ,OR 条件的运算符为 |。假设想筛选所有 quantity > 30 unit price > 50 的记录:

代码:

criteria = (df['quantity'] > 30) | (df['unit price'] > 50)
df[criteria].head()

基于字符串的记录筛选

如果筛选条件为基于字符串,可以使用用 Series.str.xxx 方法,主要有 startswith, endswithcontains等。举一个例子,筛选出所有 name 含有 White 的记录:

代码:

criteria = df['name'].str.contains('White')
df[criteria].head()

这里解释一下 pandas 布尔索引 (boolean indexing) 的概念。布尔索引的意思是首先构建一个与 DataFrame 的 index 长度相同的一个 boolean 向量 (boolean vector),这个向量中只包含 True 或者 False,布尔索引是一个 Series。然后 DataFrame 在筛选的时候,基于 DataFrame 的行索引,当布尔索引相同行索引所在行的 value 为 True 时,DataFrame 的这一行就包含在筛选之中,否则就排除在外。

为了能看得更加清晰,我们把上面的例子用另外一个方法来展示。创建一个新列:is_selected,这一列是一个布尔索引。

df['is_selected'] = df['name'].str.contains('White')

我们看到,is_selected 由 True 和 False 构成。

构建了 is_selected 列之后,通过df[df['name'].str.contains('White')] 筛选与下面的语句作用相同:

df[df['is_selected'] == True]

可以把 df['name'].str.contains('White') 这个布尔索引理解为构建了一个新列,然后基于这一列进行筛选。

基于 DateTime 类型的记录筛选

如果列的类型是 DateTime 类型,比如本示例的 date 列。pandas 读取 csv 文件时,date 列是 str 类型,所以我们先将 date 列转换成 datetime 类型,然后基于 pandas 的 Timestamp 类型构建筛选条件。

# 将 date 列转换成 datetime 类型
df['date'] = pd.to_datetime(df['date'])

# 筛选条件为日期大于 2014/4/1
criteria = df['date'] > pd.Timestamp(2014,4,1)
df[criteria].head()

同时选择行和列

如果基于本篇所说的模式,同时选择行和列,最简单的方法是组合,比如先基于行构建 DataFrame,然后再基于这个 DataFrame 选取需要的列:

where = df['name'].str.contains('White')
cols = ['name', 'quantity', 'unit price', 'ext price']
df[where][cols].head()

示例数据

sample sales - github

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas 选取行和列的方法 的相关文章

  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • st_intersects 与 st_overlaps

    这两个查询有什么区别 select a gid sum length b the geom from polygons as a roads as b where st intersects a the geom b the geom gr
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • SQL Server 连接其他表中不存在的位置

    Service Asset AssetService Id Name Id Name AssetId ServiceId
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 解析带下划线的 SQL Server 数字文字

    我想知道它为什么有效以及为什么它不返回错误 SELECT 2015 11 Result 11 2015 第二种情况 SELECT 2 1 a a 2 1 检查元数据 SELECT name system type name FROM sys
  • 我不断收到错误“关系 [TABLE] 不存在”

    我一直在尝试查询数据库中的两个表 在服务器资源管理器中 我可以看到两个表 甚至可以看到其中的列 我们将它们称为 Schema table1 和 Schema table2 其中 Schema 的第一个字母大写 我尝试运行以下查询 selec
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 通过触发器应用表的列权限

    现在 我有一个名为 Members 的表 其中包含内容 分为联系人数据 银行数据 现在 管理员应该能够创建 更新 删除用户 这些用户保存在另一个表中 该表只能访问管理员 用户应该获得自己的 mysql 用户帐户 管理员还应该能够设置权限 例
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • MySQL 转储未知选项“-no-beep”

    在旧服务器上我使用了mysql转储命令来备份 MySQL 数据库 在新服务器上 MySQL 版本为 5 6 相同的命令给出了错误 unknown option no beep 无论它插入什么 我也在互联网上搜索过 但找不到任何帮助 在 my
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主

随机推荐

  • Axure中后台管理信息系统通用原型方案 v1

    点此下载原型模板 本作品是一套通用型的中后台管理系统原型设计方案 可以帮助你快速输出标准和美观的中后台产品原型方案 极大的节省协作成本和提升工作效率 这套方案提供了12套不同类型的登录界面和系统框架 并涵盖了大量的常用组件和常用页面模板 可
  • 组件开发概述——vue组件开发(一)

    前言 组件化是WEB前端开发中的一个非常重要概念 体现面向对象编程主要特征之一 封装性 组件化开发的目的和意图是提高了软件的可维护性 实现前端代码复用性 组件是扩展 HTML 元素 其使用方式和HTML5提供的组件使用方式一致 它补充HTM
  • Java实现根据当前时间获取本周(工作日)日期(周一~周五或周天)

    import java text ParseException import java text SimpleDateFormat import java util Date import java util Calendar public
  • 【100%通过率 】【华为OD机试 c++】基站维护工程师【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 基站维护工程师 小王是一名基站维护工程师 负责某区域的基站维护 某地方有 n 个基站 1 lt n lt 10 已知各基站之间的距离 s 0 l
  • linux脚本实现scp命令自动输入密码和yes/no等确认信息

    实现方式 通过expect工具实现 bin bash yum y install expect expect c spawn scp r root 192 168 10 106 root qumf Agoly txt root qumf e
  • mysql 查询 投影_sql--查询(基本,条件,投影,排序)

    要查询数据库表的数据 我们使用如下的SQL语句 SELECT FROM 使用SELECT FROM students时 SELECT是关键字 表示将要执行一个查询 表示 所有列 FROM表示将要从哪个表查询 该SQL将查询出students
  • 位域(bit fields)简介

    1 简介 位域是指信息在存储时 并不需要占用一个完整的字节 而只需占几个或一个二进制位 例如在存放一个开关量时 只有0和1 两种状态 用一位二进位即可 为了节省存储空间 并使处理简便 C语言又提供了一种数据结构 称为 位域 或 位段 所谓
  • 信息学奥赛-逻辑运算

    学习内容 1 逻辑运算概念介绍 非 not 与 and 或 or 异或 xor 2 运算规则 AVB 两个命题中至少有一个真命题时 其复合命题为真 A B 两个命题必须全为真命题 其复合命题才是真命题 A 将原命题取反 A B 两个命题一真
  • 【深度学习】tensorflow各个版本下载地址

    tensorflow与CUDA对应表如下 需要装低版本的tensorflow 下载地址 http mirrors aliyun com pypi simple tensorflow gpu
  • 吴晓波:2020年怎么看,怎么办?

    origin https 36kr com p 5274524 快公司 时代已经过去了 编者按 本文来自微信公众号 正和岛 ID zhenghedao 口述 吴晓波 财经作家 890新商学创始人 采写 曹雨欣 36氪经授权发布 再次见到吴晓
  • C++笔记-用指定字符串替换目标字符串中的字串-find-substr-replace

    功能是 用字符串zhangsan lisi wangwu替换目标字符串names 1 2 3 中的 1 2 3 结果是 names zhangsan lisi wangwu 1 使用std string的replace方法 std stri
  • three.js 创建文本的几种方式

    精灵贴图文本 text width 128px height 128px font size 16px text align center color ffffff background ff0000 div class text 精灵贴图
  • 基于javaweb+mysql的二手交易平台二手商城二手物品(前台、后台)

    基于javaweb mysql的二手交易平台二手商城二手物品 前台 后台 运行环境 Java 8 MySQL 5 7 Tomcat 8 开发工具 eclipse idea myeclipse sts等均可配置运行 适用 课程设计 大作业 毕
  • [题解]-整理药名

    题目 医生在书写药品名的时候经常不注意大小写 格式比较混乱 现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式 即药品名的第一个字符如果是字母要大写 其他字母小写 如将 ASPIRIN aspirin 整理成 Aspirin 输入
  • MySQL数据库之DML(数据操纵语言)

    1 DML 数据操纵语言 在进行数据库操作时 首先就是要使用DML 数据操纵语言 数据操纵语言主要由插入数据 insert 更新数据 update 以及删除数据 delete 组成 这些操作主要是针对 数据表中的数据 2 插入数据 INSE
  • 论文解读:Inpaint Anything: Segment Anything Meets Image Inpainting

    论文 https arxiv org pdf 2304 06790 pdf 代码 https github com geekyutao Inpaint Anything 图1 Inpaint Anything示意图 用户可以通过点击图像中的
  • Kanzi入门学习教程

    锋影 e mail 174176320 qq com 1 安装Kanzi 2 使用Kanzi studio创建工程 Kanzi创建的工程会包含以下目录结构 其中 Tool project文件夹中存放的是设计师设计的工程 包含kanzi UI
  • 不同业务场景下数据同步方案设计

    企业开发实践中通常需要提供数据搜索的功能 例如 电商系统中的商品搜索 订单搜索等 通常 搜索任务通常由搜索引擎担当 如Elasticsearch 而我们的原始数据为了安全性等问题通常存储在关系型数据库中 在搜索数据前 我们需要先将数据从关系
  • 前端性能优化指南

    一 常用指标 1 FP First Paint 页面在导航后首次呈现出不同于导航前内容的时间点 计算方式 白屏时间 firstPaint pageStartTime 2 FCP First Contentful Paint 从页面开始加载到
  • pandas 选取行和列的方法

    本文介绍在 pandas 中如何读取数据行列的方法 数据由行和列组成 在数据库中 行被称作记录 record 列被称作字段 field 回顾一下我们对记录和字段的获取方式 比较常见的 字段根据名称获取 记录根据筛选条件获取 比如获取 stu