Pandas学习笔记系列:

原文:https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-2-pd-indexing/ 有删改

下面例子是以 6X4 的矩阵数据为基础进行介绍

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D']) """
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
"""

简单的筛选

使用下标和标签索引

如果我们想选取DataFrame中的数据,下面描述了两种途径, 他们都能达到同一个目的:

print(df['A'])
print(df.A) """
2013-01-01 0
2013-01-02 4
2013-01-03 8
2013-01-04 12
2013-01-05 16
2013-01-06 20
Freq: D, Name: A, dtype: int64
"""

让选择跨越多行或多列:

print(df[0:3])

"""
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
""" print(df['20130102':'20130104']) """
A B C D
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
"""

如果df[3:3]将会是一个空对象。后者选择2013-01-022013-01-04标签之间的数据,并且包括这两个标签。

另外在实验中我尝试过df['2013-01-04']df['20130104']都会报错,报错信息是没有这两个key。所以我进一步做如下实验:

df2 = pd.DataFrame([[0,1],[2,3]],index=['a','b'], columns=['b','a'])
print(df2) """
b a
a 0 1
b 2 3
"""
  • 实验1
print(df2.a)
"""
a 1
b 3
Name: a, dtype: int64
""" print(df2['b'])
"""
a 0
b 2
Name: b, dtype: int64
"""

可以看到这种方式是获取列元素。

  • 实验2
print(df2['a':])
"""
b a
a 0 1
b 2 3
""" print(df2['b':])
"""
b a
b 2 3
"""

可以看到使用:的这种方式可以获取行元素

当然这种使用标签名来指定范围的方法明显很麻烦,另外有个很明显的缺点就是如果有两个标签是相同的时候,你就没法用标签来指定起始范围了。所以我们还可以用数字来指定范围,例如在该例子中df[1:]是等价于df['b':]的。

另外这两种方式也存在一些区别,就是最后的一个元素,如果使用的是数字,则不会选择到,反之如果用标签则会选择,看例子更好明白:

  • 实验3
print(df2['a':'b'])
"""
b a
a 0 1
b 2 3
""" print(df2[0:1])
"""
b a
a 0 1
"""

看了上面介绍的方法你可能有点晕头转向,所以也不推荐上面的索引方法。你可以参考如下几种方法来对数据进行筛选。

根据标签 loc

我们可以使用标签来选择数据 loc, 也就是说这种情况下你不能再使用数字进行索引了。本例子主要通过标签名字选择某一行数据, 或者通过选择某行或者所有行(:代表所有行)然后选其中某一列或几列数据。:

print(df.loc['20130102'])
"""
A 4
B 5
C 6
D 7
Name: 2013-01-02 00:00:00, dtype: int64
""" print(df.loc[:,['A','B']])
"""
A B
2013-01-01 0 1
2013-01-02 4 5
2013-01-03 8 9
2013-01-04 12 13
2013-01-05 16 17
2013-01-06 20 21
""" print(df.loc['20130102',['A','B']])
"""
A 4
B 5
Name: 2013-01-02 00:00:00, dtype: int64
"""

根据序列 iloc

另外我们可以采用位置进行选择 :iloc, 在这里我们可以通过位置选择在不同情况下所需要的数据例如选某一个,连续选或者跨行选等操作。

print(df.iloc[3,1])
# 13 print(df.iloc[3:5,1:3])
"""
B C
2013-01-04 13 14
2013-01-05 17 18
""" print(df.iloc[[1,3,5],1:3])
"""
B C
2013-01-02 5 6
2013-01-04 13 14
2013-01-06 21 22 """

在这里我们可以通过位置选择在不同情况下所需要的数据, 例如选某一个,连续选或者跨行选等操作。

ix:结合lociloc

当然我们可以采用混合选择 ix, 其中选择’A’和’C’的两列,并选择前三行的数据。

print(df.ix[:3,['A','C']])
"""
A C
2013-01-01 0 2
2013-01-02 4 6
2013-01-03 8 10
"""

通过判断的筛选

最后我们可以采用判断指令 (Boolean indexing) 进行选择. 我们可以约束某项条件然后选择出当前所有数据.

print(df[df.A>8])
"""
A B C D
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
"""

微信公众号:AutoML机器学习

MARSGGBO♥原创

如有意合作或学术讨论欢迎私戳联系~
邮箱:marsggbo@foxmail.com




2019-10-30 11:06:08

【转】Pandas学习笔记(二)选择数据的更多相关文章

  1. MYSQL初级学习笔记二:数据表相关操作及MySQL存储引擎!(视频序号:初级_5,7-22|6)

    知识点三:数据表相关操作(5,7-22) --------------------------------整型--------------------------------- --测试整型 CREA ...

  2. openresty 学习笔记二:获取请求数据

    openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...

  3. 【转】Pandas学习笔记(七)plot画图

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  4. 【转】Pandas学习笔记(六)合并 merge

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  5. 【转】Pandas学习笔记(五)合并 concat

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  6. 【转】Pandas学习笔记(四)处理丢失值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  7. 【转】Pandas学习笔记(三)修改&添加值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  8. 【转】Pandas学习笔记(一)基本介绍

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  9. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

随机推荐

  1. 【2019.7.15 NOIP模拟赛 T1】夹缝(mirror)(思维题)

    思维题 此题应该是比较偏思维的. 假设一次反射后前进的距离是\(2^x(2y+1)\),则显然,它可以看做是前进距离为\(2^x\)的光线经过了\((2y+1)\)次反射,两者是等价的,甚至后者可能还 ...

  2. 第03组 Beta版本演示

    队名:不等式方程组 组长博客 组员 340 张逸杰 组长 304 苏凯婷 312 鲍冰如 320 陈荣杰 331 杨锦镔 335 王嵚 336 林家伟 341 黄彬煌 342 黄智锋 343 吴智勇 ...

  3. [LeetCode] 214. Shortest Palindrome 最短回文串

    Given a string s, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  4. [LeetCode] 104. Maximum Depth of Binary Tree 二叉树的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  5. 第09组 Beta冲刺(4/5)

    队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 过去两天完成了哪些任务 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 无 接下来的计划 完成短租车,页面美化 还剩下哪些任 ...

  6. 推荐一款来电秀App 最来电

    推荐一款来电秀App 最来电 1 介绍 最来电app,本款软件是一款集合来电视频秀.动态壁纸.个性铃声等主题美化工具类软件. 2 特色功能介绍 来电视频秀:旨在丰富用户来电后接通前的等待过程,增强通话 ...

  7. Golang(十)TLS 相关知识(一)基本概念原理

    0. 前言 最近参与一个基于 BitTorrent 协议的 Docker 镜像分发加速插件的开发,主要参与补充 https 协议 学习了 TLS 相关知识,下面对之前的学习做一下简单总结 参考文献:T ...

  8. Isilon Gen6的换盘步骤

    When a drive is faulted and ready for replacement, OneFS will illuminate the Front Panel Fault LED a ...

  9. Android 支持库迁移到AndroidX

    一.背景 Android系统版本在不断更新,从最初的Android 1.0到现在Google和各大手机厂商正在推的Android 10,平均下来每个年头都有一个大的版本更新.但用户正在用的手机上的An ...

  10. spring boot 在eclipse里启动正常,但打包后启动不起来

    现象描述: spring boot 在eclipse里启动正常,但打包后启动不起来. 错误日志如下: D:\Project>java -jar MKKY_CMS.jar . ____ _ __ ...