0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

pandas筛选数据的8个小技巧

数据分析与开发 来源:Python数据科学 作者:东哥起飞 2021-09-26 11:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

日常用Python做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。东哥总结了日常查询和筛选常用的种骚操作,供各位学习参考。本文采用sklearnboston数据举例介绍。

fromsklearnimportdatasets
importpandasaspd

boston=datasets.load_boston()
df=pd.DataFrame(boston.data,columns=boston.feature_names)

9f72463a-1114-11ec-8fb8-12bb97331649.png

1. []

第一种是最快捷方便的,直接在dataframe的[]中写筛选的条件或者组合条件。比如下面,想要筛选出大于NOX这变量平均值的所有数据,然后按NOX降序排序。

df[df['NOX']>df['NOX'].mean()].sort_values(by='NOX',ascending=False).head()

9f8862e4-1114-11ec-8fb8-12bb97331649.png

当然,也可以使用组合条件,条件之间使用逻辑符号& |等。比如下面这个例子除了上面条件外再加上且条件CHAS为1,注意逻辑符号分开的条件要用()隔开。

df[(df['NOX']>df['NOX'].mean())&(df['CHAS']==1)].sort_values(by='NOX',ascending=False).head()

9f96c9ba-1114-11ec-8fb8-12bb97331649.png

2. loc/iloc

[]之外,loc/iloc应该是最常用的两种查询方法了。loc标签值(列名和行索引取值)访问,iloc按数字索引访问,均支持单值访问或切片查询。除了可以像[]按条件筛选数据以外,loc还可以指定返回的列变量,**从行和列两个维度筛选。**比如下面这个例子,按条件筛选出数据,并筛选出指定变量,然后赋值。

df.loc[(df['NOX']>df['NOX'].mean()),['CHAS']]=2

9fae84a6-1114-11ec-8fb8-12bb97331649.png

3. isin

上面我们筛选条件< > == !=都是个范围,但很多时候是需要锁定某些具体的值的,这时候就需要isin了。比如我们要限定NOX取值只能为0.538,0.713,0.437中时。

df.loc[df['NOX'].isin([0.538,0.713,0.437]),:].sample(5)

9fbd671e-1114-11ec-8fb8-12bb97331649.png

当然,也可以做取反操作,在筛选条件前加~符号即可。

df.loc[~df['NOX'].isin([0.538,0.713,0.437]),:].sample(5)

9fcf1112-1114-11ec-8fb8-12bb97331649.png

4. str.contains

上面的举例都是数值大小比较的筛选条件,除数值以外当然也有字符串的查询需求pandas里实现字符串的模糊筛选,可以用.str.contains()来实现,有点像在SQL语句里用的是like。下面利用titanic的数据举例,筛选出人名中包含Mrs或者Lily的数据,|或逻辑符号在引号内。

train.loc[train['Name'].str.contains('Mrs|Lily'),:].head()

9fe358de-1114-11ec-8fb8-12bb97331649.png

.str.contains()中还可以设置正则化筛选逻辑。

  • case=True:使用case指定区分大小写
  • na=True:就表示把有NAN的转换为布尔值True
  • flags=re.IGNORECASE:标志传递到re模块,例如re.IGNORECASE
  • regex=True:regex :如果为True,则假定第一个字符串是正则表达式,否则还是字符串

5. where/mask

在SQL里,我们知道where的功能是要把满足条件的筛选出来。pandas中where也是筛选,但用法稍有不同。where接受的条件需要是布尔类型的,如果不满足匹配条件,就被赋值为默认的NaN或其他指定值。举例如下,将Sexmale当作筛选条件,cond就是一列布尔型的Series,非male的值就都被赋值为默认的NaN空值了。

cond=train['Sex']=='male'
train['Sex'].where(cond,inplace=True)
train.head()

9ff0217c-1114-11ec-8fb8-12bb97331649.png

也可以用other赋给指定值。

cond=train['Sex']=='male'
train['Sex'].where(cond,other='FEMALE',inplace=True)

9ffc2c10-1114-11ec-8fb8-12bb97331649.png

甚至还可以写组合条件。

train['quality']=''
traincond1=train['Sex']=='male'
cond2=train['Age']>25

train['quality'].where(cond1&cond2,other='低质量男性',inplace=True)

a00930cc-1114-11ec-8fb8-12bb97331649.png

maskwhere是一对操作,与where正好反过来。

train['quality'].mask(cond1&cond2,other='低质量男性',inplace=True)

a0174b8a-1114-11ec-8fb8-12bb97331649.png

6. query

这是一种非常优雅的筛选数据方式。所有的筛选操作都在''之内完成。

#常用方式
train[train.Age>25]
#query方式
train.query('Age>25')

上面的两种方式效果上是一样的。再比如复杂点的,加入上面的str.contains用法的组合条件,注意条件里有''时,两边要用""包住。

train.query("Name.str.contains('William')&Age>25")

a02756e2-1114-11ec-8fb8-12bb97331649.png

query里还可以通过@来设定变量。

name='William'
train.query("Name.str.contains(@name)")

7. filter

filter是另外一个独特的筛选功能。filter不筛选具体数据,而是筛选特定的行或列。它支持三种筛选方式:

  • items:固定列名
  • regex:正则表达式
  • like:以及模糊查询
  • axis:控制是行index或列columns的查询

下面举例介绍下。

train.filter(items=['Age','Sex'])

train.filter(regex='S',axis=1)#列名包含S的

train.filter(like='2',axis=0)#索引中有2的

a052a612-1114-11ec-8fb8-12bb97331649.png

train.filter(regex='^2',axis=0).filter(like='S',axis=1)

8. any/all

any方法意思是,如果至少有一个值为True结果便为Trueall需要所有值为True结果才为True,比如下面这样。

>>train['Cabin'].all()
>>False
>>train['Cabin'].any()
>>True

anyall一般是需要和其它操作配合使用的,比如查看每列的空值情况。

train.isnull().any(axis=0)

a088f6b8-1114-11ec-8fb8-12bb97331649.png

再比如查看含有空值的行数。

>>>train.isnull().any(axis=1).sum()
>>>708
编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7347

    浏览量

    95005
  • SQL
    SQL
    +关注

    关注

    1

    文章

    807

    浏览量

    46915
  • python
    +关注

    关注

    58

    文章

    4883

    浏览量

    90294

原文标题:pandas 筛选数据的 8 个骚操作

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MAX161/MX7581:CMOS 88 通道数据采集系统的深度解析

    MAX161/MX7581:CMOS 88 通道数据采集系统的深度解析 在电子工程师的日常工作中,数据采集系统是一关键的组成部分。今
    的头像 发表于 04-02 14:50 182次阅读

    提升产品可靠性:环境应力筛选试验如何发现潜在故障?

    环境应力筛选试验是一种通过施加各种环境应力来检测和剔除早期故障、提高产品可靠性的方法。这种方法广泛应用于电子、机械等行业,特别是对于那些需要在极端或变化环境中工作的设备和组件。ESS可以帮助识别
    的头像 发表于 03-25 16:47 427次阅读
    提升产品可靠性:环境应力<b class='flag-5'>筛选</b>试验如何发现潜在故障?

    宏展科技北京温度循环应力筛选(Environmental Stress Screening,简称ESS)

    宏展科技北京温度循环应力筛选(EnvironmentalStressScreening,简称ESS)说明:应力筛选是产品在设计强度极限下,运用加速技巧外加环境应力,如:预烧(burnin)、温度循环
    的头像 发表于 02-02 13:44 338次阅读
    宏展科技北京温度循环应力<b class='flag-5'>筛选</b>(Environmental Stress Screening,简称ESS)

    宏展科技北京应力筛选专门名词整理

    宏展科技北京应力筛选专门名词整理:part(元器件)产品中可以拆装的最小可分辨专桉,如分立半导体器件、电阻、积体电路、焊点和连接器等。assembly(组件)设计成可装入某一单元并与类似或其他的元件
    的头像 发表于 02-02 11:58 267次阅读
    宏展科技北京应力<b class='flag-5'>筛选</b>专门名词整理

    宏展科技北京帮您整理应力筛选温度变化温度循环规范标准列表

    应力筛选规范:MIL-202C-106、107电子及电器部件试验方法标准MIL-781可靠性试验方法手册HB/Z213机载电子设备环境应力筛选指南HB6206机载电子设备环境应力筛选方法
    的头像 发表于 02-02 11:55 343次阅读
    宏展科技北京帮您整理应力<b class='flag-5'>筛选</b>温度变化温度循环规范标准列表

    ESS应力筛选和TC温循的区别

    ESS和TC是两种不同应力筛选方法,ESS通过多应力复合提升缺陷检出率,适用于高可靠性行业,TC则用于常规产品,成本低且适用性广。
    的头像 发表于 01-21 14:01 434次阅读
    ESS应力<b class='flag-5'>筛选</b>和TC温循的区别

    NXIN CMOS 88 通道数据采集系统:MAX161 与 MX7581 深度解析

    NXIN CMOS 88 通道数据采集系统:MAX161 与 MX7581 深度解析 在电子设计领域,数据采集系统是连接现实世界与数字世界的桥梁。今天,我们将深入探讨 MAX16
    的头像 发表于 12-28 15:40 729次阅读

    合同审查、简历筛选、审核中小企业AI审核工具怎么选?

    写在前面 去年帮朋友公司选AI审核工具,踩了不少坑。今天把经验总结一下,给需要做合同审查、简历筛选、内容审核的中小企业做个参考。 先说结论: 需要多种审核工具、预算有限、担心数据安全的,直接选华为云
    的头像 发表于 12-18 13:43 498次阅读

    填补国际空白!SiC 功率模块老化筛选试验标准出炉

    《基于感性负载的 SiC 功率模块老化筛选试验方法》正式发布并同步实施。该标准历经起草小组研讨、广泛征求行业意见、委员会草案投票等规范流程,由第三代半导体产业技术创新战略联盟(CASA)发布,填补了国际上 SiC 功率模块感性负载老化筛选领域的标准空白,为产业规模
    的头像 发表于 12-05 09:40 1210次阅读

    应用生命周期管理Perforce ALM 产品更新详解:标签和筛选功能

    Perforce ALM更新标签与筛选功能!支持自定义标签、收藏常用项、高级条件组合,网页端和桌面端体验全面升级,让复杂的需求管理更高效、追溯更清晰。
    的头像 发表于 11-25 11:08 666次阅读
    应用生命周期管理Perforce ALM 产品更新详解:标签和<b class='flag-5'>筛选</b>功能

    医疗PCBA代工厂筛选指南

    当医疗设备企业在筛选 PCBA 代工伙伴时,那些真正能贴合行业特性、紧跟趋势的企业,才能成为长期信赖的助力。新飞佳科技便是这样的存在 —— 从全面通过 ISO 13485、ISO 9001 等资质
    的头像 发表于 10-30 14:53 420次阅读
    医疗PCBA代工厂<b class='flag-5'>筛选</b>指南

    订单多条件筛选接口设计与实现

    ​  背景需求 在电商系统中,订单管理模块常需支持多维度组合查询。典型筛选条件包括: 时间范围:$t in [t_{text{start}}, t_{text{end}}]$ 订单状态:$s
    的头像 发表于 10-16 14:14 389次阅读
    订单多条件<b class='flag-5'>筛选</b>接口设计与实现

    电源芯片一次筛选:复杂流程下的高要求与高效应对

    一次筛选:芯片可靠性的“第一道防线”在集成电路从设计到量产的全流程中,一次筛选是保障产品质量的核心环节。它位于封装测试阶段前端,通过多维度的严格测试,如电性能测试、环境应力筛选(如高低温、湿度测试
    的头像 发表于 08-15 08:48 1226次阅读
    电源芯片一次<b class='flag-5'>筛选</b>:复杂流程下的高要求与高效应对

    8位微控制器KF8A100Fxx数据手册

    电子发烧友网站提供《8位微控制器KF8A100Fxx数据手册.pdf》资料免费下载
    发表于 05-30 16:11 6次下载

    使用8数据总线时,FX3的GPIF II DQ[15:8]状态如何?

    我使用CYUSB 3013 -BZXC FX3 设备(16 位 GPIF II 数据总线版本)从 ADC 采集数据。ADC 为 10 位,但通常 8 位就足够了,因此我制作了两不同的
    发表于 05-09 06:44