百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Pandas数据帧筛选方法汇总,值得收藏

liuian 2024-12-20 17:18 37 浏览

子集选择是数据操作中最常执行的步骤之一。Pandas提供了许多不同的方法来筛选数据帧,来获得选定的数据子集。在本文中,我们就要来处理数据时遇到的问题以及解决办法。

开始之前,我们先来创建一个示例数据帧。

#创建一个简单的数据帧
df = pd.DataFrame({
    'name' :     [ 'Chi', 'Alex', 'Sam', 'Hoang', 'Linh', 'Dung', 'Anh'],
    'function' : [ 'Marketing', 'Tech', 'Tech', 'Finance', 'Finance', 'Marketing', 'HR'],
    'address' :  [ 'Hanoi', 'Saigon', 'Hanoi', 'Saigon', 'Hanoi', 'Hanoi', 'Saigon'],
    'gender' :   ['F', 'M', 'F', 'M', 'M', 'M', 'F'],
    'favourite_fruit' : [ 'apple', 'banana', 'orange', 'watermelon', 'grape', np.NAN, 'kumquat'],
    'age' : [20,25,21,26,30,31,23]
})

以下是我们创建的 df 数据帧:

基于多个条件选择行

基于某些特定条件选择行范围的方法很少。

#使用数据帧方法
df[(df.age >=25) & (df.address == 'Hanoi')] 

#使用query函数
df.query('age >= 25 & address == "Hanoi"') 

#使用loc函数
df.loc[(df.age >= 25) & (df.address == 'Hanoi')] 

所有这些方法产生的结果如下:

使用loc、iloc选择一系列行

在本节中,介绍几种使用 loc 和 iloc 筛选数据帧的方法。

1.使用loc选择一系列行

df.loc[0:3] 

输出:

2.使用iloc选择一系列行

df.iloc[0:3]

输出:

为什么 df.loc [0:3] 返回4行,而 df.iloc[0:3] 仅返回3行?

如我们所见,使用 loc 和 iloc 的结果有所不同。造成这种差异的原因是:

  • loc不返回基于索引位置的输出,而是基于索引的标签。
  • iloc根据索引中的位置选择行。这也意味着iloc只能处理整数。

你也可以参考下面的示例,获取更多参考。在下方的示例中,把 index 设置为“name”列,这样你就可以更清楚地理解它的用法和我的解释了。

df4 = df.copy()
df4.set_index('name', inplace = True) 

输出:

接下来让我们再次尝试上面的示例,看看loc如何处理索引标签。

index = ['Chi', 'Sam', 'Hoang']
df4.loc[index] 

输出:

根据条件选择必需列

如果有几百列数据,而你可能只想选择其中的某些列,那么可以在loc语句中的条件之后添加列的列表中。

我们可以通过下面的示例来获取 age≥25 岁的人的“name”、“gender”和“address”。

df.loc[(df.age >=25), ['name','gender','address']] 

输出:

同时选择行和列

1.使用loc、iloc选择所有行和某些特定列

#使用 iloc
df4.iloc[:,[1,2,3]]

#使用 loc和列名称
df4.loc[:, ['address','gender','favourite_fruit']]

输出:

2.使用loc、iloc选择一系列特定的行和列

# 使用 iloc
df4.iloc[2:6,3:4]

# 使用 loc
df4.loc['Sam':'Dung',['favourite_fruit']]

输出:

3.使用loc、iloc选择不相交的行和列

#使用 iloc
df4.iloc[[1,3],[2,4]]

#使用 loc
df4.loc[['Alex','Hoang'],['gender','age']]

输出:

4.使用 get.loc 和索引方法选择行和列

column_start = df4.columns.get_loc('address')
column_end = df4.columns.get_loc('favourite_fruit')
df4.iloc[1:4,column_start:column_end] 

也可以使用.loc方法执行类似的任务。这两个操作产生相同的结果。

row_start = df4.index[1]
row_end = df4.index[3]
df4.loc[row_start:row_end, 'address':'gender']

输出:

在数据帧中选择单个元素

以下几种方法可以选择数据集中的单个元素,包括 loc、iloc、iat 和 at 方法。

通过代码,我们来看看 df4 数据,看看 Hoang 最喜欢的水果是什么?

row_position = df4.index.get_loc('Hoang')column_position = df4.columns.get_loc('favourite_fruit')

#使用 iloc
df4.iloc[row_position,column_position]

#使用 iat
df4.iat[row_position,column_position]

#使用 loc
df4.loc['Hoang','favourite_fruit'] 

#使用 at
df4.at['Hoang','favourite_fruit'] 

基本上,上述4种方法检索都得到了相同的结果,即“watermelon(西瓜)”。但是,这些方法的运行速度略有不同,at 和 iat 方法比 loc 和 iloc 方法快一点。

总结

以上为Pandas筛选数据帧时的一些常用技巧。如果你在学习Pandas,或者需要Pandas来筛选数据,这些技巧值得一学!

相关推荐

vue是什么东西(vue是干什么的)

首先看看官方网站是怎么解释的,如下:Vue(读作/vju/,类似于view)是一个用于构建用户界面的渐进式框架。与其他单体框架不同,Vue从一开始就被设计为可逐步采用的。核心库仅专注于视图层,易于...

超赞 vue2/3 可视化打印设计VuePluginPrint

今天来给大家推荐一款非常不错的Vue可拖拽打印设计器Hiprint。引入使用//main.js中引入安装import{hiPrintPlugin}from'vue-plugin-...

使用VuePress2.X构建个人知识博客,域名部署到GitHub Pages中

使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHubPages中什么是VuePressVuePress是一个以Markdown为中心的静态网站生成器。你可以使用Mar...

尤雨溪新品Vite的魔力,详解(尤雨溪新品vite的魔力,详解解析)

上篇《尤雨溪是个恶魔,Vite三天10更》谈到了Webpack这一系列打包工具出现的原因。这些工具的出现是为了解决ESModules模块系统本身的环境兼容问题、以及零散的模块文件导致的...

什么是VUE?vue有什么作用?(vue的主要用途)

什么是vue?Vue.js是一套构建用户界面的渐进式框架,Vue采用自下向上增量开发的设计,其核心库只关注视图层,易于上手,同时vue完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复...

10个Vue开发技巧「实践」(vue开发需要掌握哪些知识)

作者:WahFung转发链接:https://juejin.im/post/5e8a9b1ae51d45470720bdfa路由参数解耦一般在组件内使用路由参数,大多数人会这样做:exportdef...

刚搭好vuecli结果官网建议升级vite,于是就升级下

从vue-cli迁移到Vite进行迁移的主要原因是速度。Vite的开发服务器速度很快。因为它使用原生浏览器支持JavaScript模块,所以服务器启动时间是即时的。该方法还意味着无论应用程...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言之前看了雪碧大佬的将React渲染到嵌入式液晶屏觉得很有意思,R...

【开源】基于 Vue 和 Gin 开发的前后端分离的开源框架

项目介绍Gin-vue-admin是一个基于vue和gin开发的全栈前后端分离的开发基础平台,旨在快速搭建中小型项目。拥有jwt鉴权,动态路由,动态菜单,casbin鉴权,表单生成器,代码生成器等功能...

Firefox正针对Vue.js进行优化,下版本响应速度将“显著提升”

IT之家9月7日消息,据Mozilla官方博客发文显示,Firefox浏览器正针对Vue.js进行优化,此前FireFox浏览器在面向Vue3时遇到了一些性能问题。▲图源...

vue:生命周期钩子函数及顺序(vue3.0生命周期函数)

一、vue的钩子相关顺序Vue实例有一个完整的生命周期,在newVue()后,会初始化数据,如下://初始化的入口,各种初始化工作initMixin(Vue);//数据绑定的核心方法,包括常用...

使用 Pinia ORM 管理 Vue 中的状态

转载说明:原创不易,未经授权,谢绝任何形式的转载状态管理是构建任何Web应用程序的重要组成部分。虽然Vue提供了管理简单状态的技术,但随着应用程序复杂性的增加,处理状态可能变得更具挑战性。这就是为什么...

搭建Trae+Vue3的AI开发环境(vue ide 开发工具)

从2024年2025年,不断的有各种AI工具会在自媒体中火起来,号称各种效率王炸,而在AI是否会替代打工人的话题中,程序员又首当其冲。作为一个后端开发,这篇文章基于Trae工具,来创建和运行一个简单的...

如何在Vue3中使用Nuxt进行服务端渲染开发?

服务端渲染SSR(Server-SideRendering)是一种在服务器端生成网页内容的技术,这种实现方式与传统的客户端渲染CSR(Client-SideRendering)有所不同。在SSR中...

一篇文章说清 webpack、vite、vue-cli、create-vue 的区别

webpack、vite、vue-cli、create-vue这些都是什么?看着有点晕,不要怕,我们一起来分辨一下。先看这个表格:脚手架vue-clicreate-vue构建项目vite打包代码we...