pandas按条件筛选数据的实现


Posted in Python onFebruary 20, 2021

pandas中对DataFrame筛选数据的方法有很多的,以后会后续进行补充,这里只整理遇到错误的情况。

1.使用布尔型DataFrame对数据进行筛选

使用一个条件对数据进行筛选,代码类似如下:

num_red=flags[flags['red']==1]

使用多个条件对数据进行筛选,代码类似如下:

stripes_or_bars=flags[(flags['stripes']>=1) | (flags['bars']>=1)]

常见的错误代码如下:

代码一:

stripes_or_bars=flags[flags['stripes']>=1 or flags['bars']>=1]

代码二:

stripes_or_bars=flags[flags['stripes']>=1 | flags['bars']>=1].

代码三:

stripes_or_bars=flags[(flags['stripes']>=1) or (flags['bars']>=1)]

以上这三种代码的错误提示都是:ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 中括号里面的逻辑式如何解析的暂时不清楚。貌似不能使用and、or及not。

除了使用组合的逻辑表达式之外,使用返回类型为布尔型值的函数也可以达到筛选数据的效果。示例如下:

import pandas as pd
import numpy as np
df=pd.DataFrame(np.array(range(10)).reshape((5,-1)))
df.columns=['0','1']
df=df[df['1'].isin([3,5,9])]

 其df的结果如下:

pandas按条件筛选数据的实现

2.iloc()方法、ix()方法和iloc()方法的区别

首先dataframe一般有两种类型的索引:第一种是位置索引,即dataframe自带的从0开始的索引,这种索引叫位置索引。另一种即标签索引,这种索引是你在创建datafram时通过index关键字,或者通过其他index相关方法重新给dataframe设置的索引。这两种索引是同时存在的。一般设置了标签索引之后,就不在显示位置索引,但不意味着位置索引就不存在了。

假设有如下几行数据(截图部分只是数据的一部分),很明显,以下显示的索引为标签索引。同时574(标签索引)行对应的位置索引则为0,1593行对应的位置索引为2, 以此类推。

pandas按条件筛选数据的实现

先来看loc(),其API网址http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.htm,函数名下方有一行解释,Access a group of rows and columns by label(s) or a boolean array.. loc[] is primarily label based, but may also be used with a boolean array. 

代码一:

first_listing = normalized_listings.loc[[0,4]]

结果如下,可以看出其输出的是dataframe中标签索引为0和4的两行数据。注意,如果标签索引的类型为字符串,则在loc中也要用字符串的形式。

pandas按条件筛选数据的实现

再来看iloc(),其API网址http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html,函数名下方的解释为 Purely integer-location based indexing for selection by position. .iloc[] is primarily integer position based ( from 0 to length-1 of the axis), but may also be used with a boolean array.

代码二:

first_listing = normalized_listings.iloc[[0,4]]

结果如下,可以看出其输出的dataframe中第0行和第4行的数据,即按方法是按照位置索引取得数。注意使用位置索引的时候只能用整数(integer position,bool类型除外)

pandas按条件筛选数据的实现

另外,还可以向loc和iloc中传入bool序列,这样就可以将前面介绍的boo表达式用到loc和iloc中。下面来看看怎么使用bool序列?

import pandas as pd
data=pd.DataFrame(data={'col1':[1,2,3,5,10],'col2':[50,90,67,75,100]},\
         index=['a','b','c','d','e'])
print(data)
#iloc[]示例,iloc似乎不能直接使用逻辑表达式的结果,我这里将其转置成list之后就可以用了,原因暂且不明
data_1=data.iloc[list(data['col1']>5)]
print(data_1)
#loc[]示例,loc中可以直接使用逻辑表达式
data_2=data.loc[data['col1']>5]
print(data_2)

在iloc[]中,如果直接使用loc中的逻辑表达式而不进行list()转化的话,会提示ValueError: iLocation based boolean indexing cannot use an indexable as a mask错误。

如果查看上述两段代码中得到的first_listing。我们会发现两处first_listing的类型均为datafrarm。loc和iloc除了能对行进行筛选,还可以筛选列。如果在loc和iloc中设定了对列的筛选,则筛选之后得到的数据可能是datafrme类型,也有可能是Series类型。下面直接以代码运行结果进行说明。

import pandas as pd
data=pd.DataFrame(data={'col1':[1,2,3,5,10],'col2':[50,90,67,75,100]},\
         index=['a','b','c','d','e'])
print(data)
#iloc[]示例 ,在使用iloc的时候,[]里面无论是筛选行还是筛选列,都只能使用数字形式的行号或列号。
#这里如果使用‘col2',这里会报错
data_1=data.iloc[[0,4],[1]]#当需要筛选出多列或者希望返回的结果为DataFrame时,可以将列号用[]括起来。
print(data_1)
print(type(data_1))
data_2=data.iloc[[0,4],1]#当只需要筛选出其中的一列时可以只写一个列号,不加中括号,这种方法得到的是一个Series
print(data_2)
print(type(data_2))
#loc[]示例
data_3=data.loc[['a','e'],['col2']]
print(data_3)
print(type(data_3))
data_4=data.loc[['a','e'],'col2']
print(data_4)
print(type(data_4))

具体的代码执行结果如下:

pandas按条件筛选数据的实现

最后看ix()方法,其API网址http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.ix.html,其解释为 A primarily label-location based indexer, with integer position fallback.

代码三:

first_listing = normalized_listings.ix[[0,4]]

结果如下似乎与loc()方法的结果是相同的,但是从其给出的解释来看,其好像是前两个方法的集合。

pandas按条件筛选数据的实现

到此这篇关于pandas按条件筛选数据的实现的文章就介绍到这了,更多相关pandas 条件筛选 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python合并多个装饰器小技巧
Apr 28 Python
Python编程中的文件操作攻略
Oct 16 Python
python轻松查到删除自己的微信好友
Jan 10 Python
Python常用知识点汇总
May 08 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
python pygame入门教程
Jun 01 Python
python装饰器代码解析
Mar 23 Python
图神经网络GNN算法
May 11 Python
python实现b站直播自动发送弹幕功能
Feb 20 #Python
如何用 Python 制作 GitHub 消息助手
Feb 20 #Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 #Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 #Python
安装不同版本的tensorflow与models方法实现
Feb 20 #Python
python爬虫scrapy基本使用超详细教程
Feb 20 #Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 #Python
You might like
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
初识JQuery 实例一(first)
2011/03/16 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
简述JS控制台的使用
2018/07/15 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
python mysqldb连接数据库
2009/03/16 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
分公司经理岗位职责
2013/11/11 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
升职演讲稿范文
2014/05/23 职场文书
运动会稿件100字
2014/09/24 职场文书
2014年司法局工作总结
2014/12/11 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
社团招新宣传语
2015/07/13 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python