本文介绍在 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

参考

  • Comparison with SQL

pandas 选取行和列的方法相关推荐

  1. pandas drop 删除行和列的方法

    pandas drop 删除行和列的方法 文章目录 pandas drop 删除行和列的方法 删除行 按行索引删除 删除单行 删除多行 删除列 按列索引删除(列本来是没有索引的,用df.columns ...

  2. pandas的行列获取/pandas iloc和loc的使用/如何获取pandas的行和列

    Pandas行和列的获取 由于平时没有系统的学习pandas,导致在实际应用过程中,对于获取df中的行和列经常出现问题,于是总结一下,供自己以后参考. 参考的书籍在线版链接:利用 Python 进行数 ...

  3. php列出mysql表格,php列出mysql表所有行和列的方法

    本文实例讲述了php列出mysql表所有行和列的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: Selecting Data $user = "root"; ...

  4. pandas中如何选取某几列_pandas 选取行和列数据的方法

    本文介绍在 pandas 中如何读取数据行列的方法.数据由行和列组成,在数据库中,一般行被称作记录 (record),列被称作字段 (field).回顾一下我们对记录和字段的获取方式:一般情况下,字段 ...

  5. numpy 若干行和列_Numpy的轴,pandas的行和列

    使用幕布做了一系列详细笔记请点击: 高维ndarray的轴轴编号和索引傻傻分不清楚 很多函数需要传入轴编号,非常容易和索引弄混,以3维数组为例,轴有3条,编号分别为 0,1,2 我们制造一个3×3×3 ...

  6. 使用pandas对行和列进行交换

    类似于 a, b = b, a 的数据交换方法 t[[1,2],:] = t[[2,1],:] # 进行行的交换,此处为第一行和第二行进行交换 t[:,[1,2]] = t[:,[2,1]] # 进行 ...

  7. pandas 选择行和列

    import pandas as pd df = pd.DataFrame({'日期': ['2021-7-2', '2021-8-2', '2021-9-2', '2021-10-2'],'A': ...

  8. pandas 选取指定列

    1,按照位置: import pandas as pd data = pd.read_csv() data = data.iloc[:, 0:3] # 按位置取某几列 2,按照指定列名: import ...

  9. R语言数据框data.frame行和列求和方法

    代码如下: widgets <- c(179,153,183,153,154) gadgets <- c(167,193,190,161,181) thingys <- c(182, ...

最新文章

  1. pyplot.plot画图turtouil
  2. 洛谷 P1516 青蛙的约会
  3. ASP.NET下载网络图片
  4. 关于Fiori MyAccount无法在standalone环境下运行的问题
  5. java jsp if else if_jsp页面使用if else语句 | 学步园
  6. 最近在练习爬虫,分享一些简单入门的知识
  7. Java多线程学习二十九:AtomicInteger(原子类) 和 synchronized 的异同点?
  8. #tomcat#内部结构和处理一个请求的过程(一)
  9. Thinkphp学习笔记——友情链接的添加和验证
  10. Joplin使用坚果云WebDAV同步存在的问题以及解决办法
  11. Writeup for 0CTF2017 web
  12. 今天手把手教你做一个Python版的迷宫小游戏
  13. LOE是什么?如何加入?
  14. 给出三个坐标点,求三角形周长。
  15. 计划的主体部分应有哪些内容_知道智慧树应用写作技能与规范网课答案
  16. search函数和search_n()函数
  17. 熊猫教你路由器和三层交换机的区别
  18. 【Linux】echo打印命令
  19. ModuleNotFoundError: No module named gensim.corpora
  20. 【高德地图API】汇润做爱地图技术大揭秘

热门文章

  1. SpringCloud Alibaba实战第九课 分布式事务理论、DevOps运维
  2. 诸葛 理解产品、交互和运营
  3. 抢票成功率高的抢票软件
  4. WPS Office应用大全
  5. 查看文章影响因子的插件_查询文献可实时显示影响因子与分区排名的2个强大浏览器插件...
  6. 戴尔首推免息分期付款电脑
  7. AcWing 2019. 拖拉机(双端队列BFS)
  8. XXE漏洞以及XXE漏洞如何修复
  9. 淘宝电商评论数据可视化分析系统-电商评论分析系统
  10. nba2k15正版服务器,NBA2K15正版联机帐户过期怎么办_NBA2K15正版联机帐户过期解决方法_快吧单机游戏...