DataFrame筛选出指定列值的行

news/2024/7/23 18:27:39 标签: python, 深度学习, 机器学习

需求


对于一个DataFrame,常常需要筛选出某列为指定值的行。

pandas中获取数据的有以下几种方法:

  • 布尔索引
  • 位置索引
  • 标签索引
  • 使用API

假设df数据如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'code': '000001.SZ 000002.SZ 000006.SZ 000009.SZ'.split(),
                   'open': '1.2 20 3.5 2.8'.split(),
                   'close': np.arange(4), 
                   'high': np.arange(4) * 2})

数据如下:

>>> df
        code open  close  high
0  000001.SZ  1.2      0     0
1  000002.SZ   20      1     2
2  000006.SZ  3.5      2     4
3  000009.SZ  2.8      3     6

问题如下:

  1. 找出code为指定值的行
  2. 找出open>3的行
  3. 找出

布尔索引


找出符合条件的所有行,即条件判断bool值为true,如找出code为000002.SZ的行:

df[df['code'] == '000002.SZ'] # 判断等式是否成立

这会列出所有使得条件 df[‘code’] == ‘000002.SZ’ 为true的所有行,输出如下:

>>> df[df['code'] == '000002.SZ']
        code open  close  high
1  000002.SZ   20      1     2

位置索引


使用iloc方法,根据索引的位置来查找数据的。这个例子需要先找出符合条件的行所在位置。

mask = df['code'] == '000002.SZ'
pos = np.flatnonzero(mask)
df.iloc[pos]

# 直接根据索引取值
df.iloc[1:2]

输出与之前相同。

标签索引


适用于DataFrame的行列都是有标签的情形。

如:

# 把要操作的列作为索引
df.index=df['code'] # 将code列作为DataFrame的行索引
df.loc['000002.SZ', :] # 注意,这种根据索引iloc得到的结果不是DataFrame类型,而是Series

# 使用布尔
df.loc[df['code']=='000002.SZ']

结果如下:

>>> df.loc['000002.SZ', :]
code     000002.SZ
open            20
close            1
high             2
Name: 000002.SZ, dtype: object
>>>
>>> df.loc[df['code']=='000002.SZ']
                code open  close  high
code
000002.SZ  000002.SZ   20      1     2

使用API


适用于数据量比较大的情形,方法为:pd.DataFrame.query。

如:

df.query('code=="000002.SZ"')

# 多条件
df.query('code=="000002.SZ" | code=="000006.SZ"')

结果如下:

>>> df.query('code=="000002.SZ"')
                code open  close  high
code
000002.SZ  000002.SZ   20      1     2
>>>
>>> # 多条件
>>> df.query('code=="000002.SZ" | code=="000006.SZ"')
                code open  close  high
code
000002.SZ  000002.SZ   20      1     2
000006.SZ  000006.SZ  3.5      2     4

小结


除了上面判断相等的情况,也可以结合条件判断一起使用。

  1. 筛选出列值属于某个范围内的行,用isin:df.loc[df['column_name'].isin(some_values)] # some_values是可迭代对象
  2. 多种条件限制时使用&,&的优先级高于>=或<=,所以要注意括号的使用: df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]
  3. 筛选出列值不等于某个/些值的行:
df.loc[df['column_name'] != 'some_value']

df.loc[~df['column_name'].isin('some_values')] #~取反

df功能强大,且用且总结。

参考

https://www.cnblogs.com/small-bud/p/12380357.html


http://www.niftyadmin.cn/n/1629798.html

相关文章

消息路由的构成

消息路由的构成可以包含如下部分&#xff1a; 1&#xff0c;基于内容的路由器。 2&#xff0c;消息过滤器。 3&#xff0c;动态路由表。 4&#xff0c;接受表。 5&#xff0c;分解器。 6&#xff0c;聚合器。 7&#xff0c;重排器。 8&#xff0c;复合消息处理器。 9&#xff0…

沪深股票代码区分及标的数量

深A 截止目前&#xff0c;深A共两个板块&#xff1a;主板和创业板。 其中&#xff0c;主板包含了原来的主板和中小板。 主板代码以00开头&#xff0c;标的数量共1500支&#xff0c;包括&#xff1a; 002&#xff08;原中小板&#xff09;001000003 创业板以30开头&#xff…

Css 特性之 transition和transform

CSS 有一些新的属性&#xff0c;可以简化代码的书写&#xff0c;用简单的代码就可以实现复杂的变化。不用像 js 那样&#xff0c;需要写很多代码 这里主要介绍三个属性&#xff1a;transition ,transform,以及translate 1. transition: 允许属性在一定时间内进行过渡 规则&…

【字符串问题】求一个字符串中连续出现次数最多的子串

2013-09-14 10:47:39 在面试宝典上看到的题目&#xff0c;自己做了一下&#xff0c;用了C中的string类&#xff0c;比较方便。 思路&#xff1a; 遍历源字符串的每一个字符&#xff0c;以该字符为首的重复子串的长度为1到以该字符为首的后缀字符串&#xff08;即以该字符串为首…

HDU_oj_2031 进制转换

Problem Description输入一个十进制数N&#xff0c;将它转换成R进制数输出。Input输入数据包含多个测试实例&#xff0c;每个测试实例包含两个整数N(32位整数)和R&#xff08;2<R<16, R<>10&#xff09;。Output为每个测试实例输出转换后的数&#xff0c;每个输出占…

unordered_map多线程崩溃在find

崩溃 最近程序中出现了崩溃现象&#xff0c;经过查询&#xff0c;发现是崩溃在STL容器的查询中。 崩溃的截图如下&#xff1a; 关于unordered_map 无序 map 容器&#xff0c;unordered_map 容器不会像 map 容器那样对存储的数据进行排序。 unordered_map 容器底层采用的是哈希…

jQuery EasyUI 数据树控件(Tree)的简单使用实例

最近在了解mvcjQueryEasyUI 开发web应用程序&#xff0c;使用EasyUI 的Tree 树形控件全动态生成无限级Tree的时候&#xff0c;不知道具体怎么实现&#xff0c;首先想到的递归函数&#xff0c;花了一段弄了个demo,实现方法具体如下&#xff1a; 1&#xff0c;首先写了一个辅助的…

mysql安装及主从配置

mysql安装 我使用的系统是centos7&#xff0c;默认安装的版本是5.7.29。 以下操作在主从节点都要执行。 安装步骤如下&#xff1a; wget -i -c http://repo.mysql.com/mysql57-community-release-el7.rpm yum -y install mysql57-community-release-el7.rpm yum -y install…