本文介绍在 pandas 中如何读取数据行列的方法。数据由行和列组成,在数据库中,一般行被称作记录 (record),列被称作字段 (field)。回顾一下我们对记录和字段的获取方式:一般情况下,字段根据名称获取,记录根据筛选条件获取。比如获取 student_id 和 studnent_name 两个字段;记录筛选,比如 sales_amount 大于 10000 的所有记录。对于熟悉 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, endswith 和 contains等。举一个例子,筛选出所有 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()

参考

pandas中如何选取某几列_pandas 选取行和列数据的方法相关推荐

  1. Python 使用 pandas 和 openpyxl 读取 excel 表格(读取指定行和列)

    前言 在使用Python处理表格时,pandas 和 openpyxl是使用最多的两个库.现在我来简单记录一下这两个库在处理Excel表格时一些常用操作. 1.使用pandas操作excel表格 (1 ...

  2. 【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子

    目录 一.向某个格子中写入内容 sheet['A1'] = 'hello world' cell.value = 'I Love Python' 二.append()--插入一行的操作 三.在表格中插 ...

  3. Linux中vim编辑文件跳转指定的行和列

    一.前言   在Linux中使用vim编辑器修改文件,如果内容很多,那就需要定位到指定的行和列了.不同模式的跳转方式不一样,主要为正常模式和命令行模式的行号跳转.     如需设置vim编辑文件时显示 ...

  4. 【Python爬虫系列教程 11-100】Python网络爬虫实战:最简单的Pandas 中的read_html一行代码爬取网页表格型数据,就可以爬取虎扑体育NBA球员信息

    文章目录 爬取对象 分析 实现代码 爬取对象 虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. ...

  5. python用pandas提取行列_python- pandas 不删除符合条件的行和列

    我正在尝试建立一个回归模型,以便根据出现的单词来预测收视率(1-5)(回归本身并不一定表现良好,更多的是关于所采用的方法). 我使用以下代码创建了一个词频矩阵: bow = df.Review2.st ...

  6. 【Python】Pandas中的宝藏函数-rank()

    所谓的排名,就是一组数据,我们想要知道每一条数据在整体中的名次,需要的是输出名次,并不改变原数据结构. 排序会改变原来的数据结构,且不会返回名次,这一点区别需要弄明白.初学的时候容易弄混淆. 本文将通 ...

  7. dataframe groupby_详解pandas中的map、apply、applymap、groupby、agg.

    一.简介 pandas提供了很多方便简洁的方法,用于对单列.多列数据进行批量运算或分组聚合运算,熟悉这些方法后可极大地提升数据分析的效率,也会使得你的代码更加地优雅简洁. 本文就将针对pandas中的 ...

  8. Pandas 中的这 3 个函数,没想到竟成了我数据处理的主力

    作者 | luanhz   责编 | 张文 来源 | 转载自公众号小数志 学 Pandas 有一年多了,用 Pandas 做数据分析也快一年了,常常在总结梳理一些 Pandas 中好用的方法.例如三个 ...

  9. Pandas中的这3个函数,没想到竟成了我数据处理的主力

    公众号后台回复"图书",了解更多号主新书内容 作者:luanhz 来源:小数志 学Pandas有一年多了,用Pandas做数据分析也快一年了,常常在总结梳理一些Pandas中好用的 ...

最新文章

  1. 从技术到科学,中国AI向何处去?
  2. I、Q 通道幅相不平衡的影响及改善
  3. OpenCV周期性除噪滤波器
  4. 强行杀windows服务
  5. 搭载第四代自研神龙架构 阿里云发布RDMA增强型实例等多款新品
  6. jquery序列化serialize()方法空格变为+问题解决参考方法
  7. 520礼包 | 情感分析算法从原理到PaddlePaddle实战全解
  8. pandas—pandas.crosstab交叉表
  9. 王者-甄别同一板块强弱股的方法【真假美猴王】
  10. 16:忽略大小写的字符串比较
  11. Scan chain/SE,SI,SO 带scan的寄存器
  12. [bzoj1001]狼抓兔子 最小割
  13. 常用Cocoa框架概览
  14. labelme 批量转换json文件 详细步骤
  15. landsat8 编辑头文件信息
  16. 全国各省一本和二本录取率2014年,用事实说话
  17. android TextView向上滚动(模仿滚动文字广告效果)
  18. FCoin“出事”后,团队关键人物回复了!
  19. 【Java】函数式编程学习笔记——Stream流
  20. CSharp 创建项目

热门文章

  1. 抓住二维核力的尾巴---将粒子
  2. 1/r单中心双电子积分Li+
  3. 神经网络模拟条件反射
  4. c++矩阵类_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
  5. 【STM32】跑马灯实验主要程序代码分析
  6. STM32 基础系列教程 36 - Lwip_dns
  7. c运行库、c标准库、windows API的区别和联系
  8. 【雷达对抗】频率测量与频谱分析-频率搜索与测频技术
  9. ubuntu命令创建用户无法登入问题
  10. 中缀转后缀表达式并求值