经典网站设计作品,江西省住房建设部官方网站,minty wordpress,中国建设银行开户行查询1. 前言
当涉及数据处理和分析时#xff0c;Pandas是Python编程语言中最强大、灵活且广泛使用的工具之一。Pandas提供了丰富的功能和方法#xff0c;使得数据的选择、筛选和处理变得简单而高效。在本博客中#xff0c;我们将重点介绍Pandas中数据筛选的关键知识点#xff…1. 前言
当涉及数据处理和分析时Pandas是Python编程语言中最强大、灵活且广泛使用的工具之一。Pandas提供了丰富的功能和方法使得数据的选择、筛选和处理变得简单而高效。在本博客中我们将重点介绍Pandas中数据筛选的关键知识点包括条件索引、逻辑操作符、query()方法以及其他一些常用技巧~ 2. 筛选
在Python和Pandas库中索引是一种用于标识和访问数据的重要概念。索引可以是整数、标签、日期等类型它允许我们按照指定的标记来查找、选择和操作数据。本文重点介绍的是Pandas中的筛选操作我们先来简单回顾一下Python中一些筛选的相关操作。
在Python中列表、元组、字符串、字典都是支持索引的数据结构。索引从0开始表示数据元素在序列中的位置。 例如对于列表可以通过list[0]来访问列表的一个元素
In[0]:
list_filter [1,2,3,4,5]
print(list_filter[0])
print(list_filter[1])out[0]:
1
2对于字符串也可以使用索引来访问单个字符
In[1]:
string_filter hello
print(string_filter[0])
print(string_filter[1])out[1]:
h
e对于元组亦是如此
In[2]:
tuple_filter (1, 2, 3, 4)
print(tuple_filter[0])
print(tuple_filter[2])out[2]:
1
3对于字典则是可以通过’‘键’来索引字典中的值
In[3]:
dict_filter {1: one, 2: two, 3: three}
print(dict_filter[1])
print(dict_filter[2]) out[3]:
one
two除此之外你也可以通过切片索引、负数索引来进行筛选操作在此就不在赘述了 案例数据表university_rank.csv 2.1 整数位置索引筛选
df.iloc是Pandas中用于整数位置索引Integer Location Indexing的一种属性用于访问DataFrame或Series中的数据。iloc允许你使用整数位置来选择特定的行和列类似于Python中的列表索引。 语法 df.iloc[row_index, column_index] 其中的row_index和column_index可以是单个整数、切片或者列表
我们先来尝试一下整行筛选
df.iloc[start_loc:end_loc]这里需要注意的是end_loc是取不到的比如df.iloc[0:2]从0开始只能取到01。
In[4]:
import pandas as pd
df pd.read_csv(university_rank.csv) # 读取案例数据表
df # 展示数据表跟print一样的作用out[4]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉1牛津大学2欧洲医学科研产出2北京大学3亚洲商学国际影响力3悉尼大学4大洋洲计算机科学教学质量4圣保罗大学5南美艺术学生满意度..................95圣保罗国立大学96南美计算机科学研究生录取率96约翰内斯堡大学97非洲环境科学学术声誉97麦吉尔大学98北美艺术学生满意度98伦敦政治经济学院99欧洲法律国际影响力99东京大学100亚洲教育毕业生就业率
100 rows × 5 columns In[5]:
df.iloc[0:2] # 对案例数据表进行整行筛选out[5]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉1牛津大学2欧洲医学科研产出 行能切边那列能不能切片呢答案当然是能只需要用’ , 来分割行列之间的索引即可。
In[6]:
df.iloc[0:2, 0:3]out[6]:
大学名称排名地区0哈佛大学1北美1牛津大学2欧洲 补充我们知道在Pandas中不仅有DataFrame还有Series在Series中我们也可以使用df.iloc[index]来进行索引其中index可以是单个整数、切片或者列表
In[7]:
data [1, 2, 3, 4, 5]
series pd.Series(data) # 创建一个Series类型的数据# 使用整数位置索引访问数据
print(series.iloc[0])
print(series.iloc[1:3])
out[7]:
1
2,32.2 标签索引筛选
df.loc是Pandas中用于标签索引的一种属性用于访问DataFrame或Series中的数据。loc允许你使用标签来选择特定的行和列这使得索引更加灵活可以根据标签选择数据也可以使用条件来筛选。
语法 df.loc[row_label, column_label] 其中的row_label和column_label可以是单个整数、切片或者列表
我们先来尝试一下整行筛选df.loc 与绝对值筛选的区别是若使用df.loc[0:4]那么将会筛选从索引为0到索引为4的所有列
In[8]:
df.loc[0:4]out[8]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉1牛津大学2欧洲医学科研产出2北京大学3亚洲商学国际影响力3悉尼大学4大洋洲计算机科学教学质量4圣保罗大学5南美艺术学生满意度 如果不想要[0:4]中间的部分只想要index0 和 index4的行给它们中间的’:‘换成’,加一个列表嵌套就行简单来说就是使用标签列表来筛选
In[9]:
df.loc[[0, 4]]out[9]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉4圣保罗大学5南美艺术学生满意度
在此就不再赘述Series的df.loc了基本用法与上类似不过是从多维转为了一维而已。 2.3 多重索引筛选
df.xs是Pandas中的一种方法用于在DataFrame中根据指定的标签或位置行或列获取跨越多个层次的数据。它主要用于处理具有多层索引的DataFrame
df.xs(# 要获取的行或列的标签或位置key, # 可选参数用于指定获取行还是列。默认为行也可以设置为1列axis 0,# 可选参数用于指定多层索引的级别。只在有层次化索引时才需要设置level, # 可选参数指定是否丢弃返回结果中的索引级别默认为Truedrop_level True
)In[10]:
df pd.read_csv(university_rank.csv, index_col[排名, 地区]) # 读取案例数据表并设置双重索引
dfout[10]:
大学名称学科领域排名依据排名地区1北美哈佛大学工程学术声誉2欧洲牛津大学医学科研产出3亚洲北京大学商学国际影响力4大洋洲悉尼大学计算机科学教学质量5南美圣保罗大学艺术学生满意度...............96南美圣保罗国立大学计算机科学研究生录取率97非洲约翰内斯堡大学环境科学学术声誉98北美麦吉尔大学艺术学生满意度99欧洲伦敦政治经济学院法律国际影响力100亚洲东京大学教育毕业生就业率
100 rows × 3 columns In[11]:
df.xs(北美, level1)out[11]:
大学名称学科领域排名依据排名1哈佛大学工程学术声誉7麦吉尔大学教育校友网络11斯坦福大学工程研究成果17麦吉尔大学教育毕业生就业率21加州理工学院工程学术声誉28麦吉尔大学医学教学质量32斯坦福大学经济学校友网络38麦吉尔大学艺术学生满意度42加州理工学院社会科学校友网络48麦吉尔大学艺术学生满意度52斯坦福大学社会科学校友网络58麦吉尔大学艺术学生满意度62加州理工学院社会科学校友网络68麦吉尔大学艺术学生满意度72斯坦福大学社会科学校友网络78麦吉尔大学艺术学生满意度82加州理工学院社会科学校友网络88麦吉尔大学艺术学生满意度92斯坦福大学社会科学校友网络98麦吉尔大学艺术学生满意度 2.4 多条件索引筛选
在Pandas中你可以使用多个条件来进行多条件索引。有几种方法可以实现多条件索引其中一些常用的方法如下
使用和|操作符 你可以使用表示与条件|表示或条件。通过将条件括在圆括号中可以确保优先级正确使用query()方法 query()方法允许你使用字符串表示多个条件更加直观和简洁使用isin()方法 isin()方法允许你检查某一列是否包含指定的多个值然后将条件应用于DataFrame
2.4.1 使用和|操作符
语法df[(option_one) /| (option_two)...] 其中option_one和option_two都是筛选的条件结果取决于中间的连接符
In[12]:
df pd.read_csv(university_rank.csv) # 读取一下案例数据表
dfout[12]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉1牛津大学2欧洲医学科研产出2北京大学3亚洲商学国际影响力3悉尼大学4大洋洲计算机科学教学质量4圣保罗大学5南美艺术学生满意度..................95圣保罗国立大学96南美计算机科学研究生录取率96约翰内斯堡大学97非洲环境科学学术声誉97麦吉尔大学98北美艺术学生满意度98伦敦政治经济学院99欧洲法律国际影响力99东京大学100亚洲教育毕业生就业率
100 rows × 5 columns In[13]:
df[(df.排名 6) (df.排名 10)] # 使用多条件筛选out[13]:
大学名称排名地区学科领域排名依据5约翰内斯堡大学6非洲法律毕业生就业率6麦吉尔大学7北美教育校友网络7伦敦政治经济学院8欧洲经济学国际化程度8东京大学9亚洲社会科学研究生录取率9澳大利亚国立大学10大洋洲环境科学科研经费
2.4.2 query()方法
目前较常用的筛选语句query()方法是Pandas中的一种数据筛选方法它允许你使用字符串表达式来选择DataFrame中满足特定条件的数据。query()方法的设计灵感来自于SQL语言的查询语法它能够简化复杂的条件筛选并且能够处理大部分的数据选择需求。
语法:df.query(expr, inplaceFalse)
df.query(# 类sql语句expr# 是否在原df上修改,默认为Falseinplace False
)Tip:在expr语句中可以使用’来引用外部变量
In[14]:
df pd.read_csv(university_rank.csv) # 读取一下案例数据表
expr 排名 9 and 排名 16 and 地区 亚洲 # 使用类sql语句多条件筛选DataFrame表
df.query(expr) # 查看使用query()方法查询的结果out[14]:
大学名称排名地区学科领域排名依据12清华大学13亚洲商学校友网络 In[15]:
limit 5 # 设置一个外部变量
expr 排名 limit and 排名 50 and 地区 亚洲 # 在expr参数里面应用外部变量
df.query(expr) # 查看使用query()方法查询的结果out[15]:
大学名称排名地区学科领域排名依据8东京大学9亚洲社会科学研究生录取率12清华大学13亚洲商学校友网络18东京大学19亚洲社会科学国际化程度22香港大学23亚洲商学国际影响力29东京大学30亚洲艺术学生满意度33清华大学34亚洲医学学术声誉39东京大学40亚洲教育毕业生就业率43香港大学44亚洲工程教学质量
若想对数量进行控制那么也可以使用.head()方法或者.tail()方法来进行嵌套查询
In[16]:
df.query(expr).head(3)out[16]:
大学名称排名地区学科领域排名依据8东京大学9亚洲社会科学研究生录取率12清华大学13亚洲商学校友网络18东京大学19亚洲社会科学国际化程度
2.4.3 isin()方法布尔索引筛选
isin()是Pandas中的一种方法用于检查DataFrame或Series中的元素是否包含在指定的列表、集合或Series中。isin()方法返回一个布尔值的Series其中元素为True表示对应的元素在指定的集合中False表示不在其中。
语法df.col_name.isin(values)或者df.isin(values) 该方法会返回一个bool数列其中values一般为一个列表、集合或Series用于指定待检查的元素集合。
In[17]:
df pd.read_csv(university_rank.csv) # 读取一下案例数据表
df # 展示案例数据表out[17]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉1牛津大学2欧洲医学科研产出2北京大学3亚洲商学国际影响力3悉尼大学4大洋洲计算机科学教学质量4圣保罗大学5南美艺术学生满意度..................95圣保罗国立大学96南美计算机科学研究生录取率96约翰内斯堡大学97非洲环境科学学术声誉97麦吉尔大学98北美艺术学生满意度98伦敦政治经济学院99欧洲法律国际影响力99东京大学100亚洲教育毕业生就业率
100 rows × 5 columns In[18]:
df.排名.isin([1, 5, 6])out[18]:
0 True
1 False
2 False
3 False
4 True...
95 False
96 False
97 False
98 False
99 False
Name: 排名, Length: 100, dtype: bool现在返回是一个bool列表想要获取到筛选后的数据在外面套上一层df就行了
In[19]:
df[df.排名.isin([1, 5, 6])]out[19]:
大学名称排名地区学科领域排名依据0哈佛大学1北美工程学术声誉4圣保罗大学5南美艺术学生满意度5约翰内斯堡大学6非洲法律毕业生就业率
Tips
在Pandas中可以使用~进行反向筛选即剔除满足条件的。也可以使用drop()方法来删除满足的条件列和行在进行范围筛选的使用也可以使用between()方法 结束语
如果有疑问欢迎大家留言讨论你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗我们之间的交流是我最大的动力