目录
前言
一、按列表索引查询
查询单值
1.at(单值查询-loc)
2.iat(单值查询-iloc)
3. loc(行/列名索引查询)
4. iloc(行/列索引查询)
二、按条件查询
单条件查询
多条件查询
嵌套筛选
总结
前言
关于一文速学Pandas系列已经将基础部分内容更完,基础部分的内容完全可以满足大部分数据分析应用场景且绝对够用。对于分析工具最快速上手的方法还是创造条件去实际运用它,反复运用直至能够熟练想到该使用何种方法去实现该功能需求。
Pandas数据分析系列专栏已经更新了很久了,基本覆盖到使用pandas处理日常业务以及常规的数据分析方方面面的问题。从基础的数据结构逐步入门到处理各类数据以及专业的pandas常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者大数据开发的朋友推荐订阅专栏,将在第一时间学习到Pandas数据分析最实用常用的知识。此篇博客篇幅较长,涉及到数据可视化等各类操作,值得细读实践一番,我会将Pandas的精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。
有些Pandas的基本常用功能我会再进行进一步的细讲以及一些高阶操作和用法,在之前学习基础之上更加易于理解和掌握,也起到了完整知识链的补全作用。之前在讲数据筛选查询可能讲的不是足够细致,一些高阶用法还没有展示,现在补全。
一、按列表索引查询
查询单值
按照索引位置查询一个DataFrame中对应位置的元素共有四个API函数可以使用,我们首先来看看如何用。先创建一个DataFrame:
data={
'name':['user1','user2','user3','user'],
'city':['北京','深圳','上海','杭州'],
'territory':['大数据','数据分析','数据分析','spark']
}
index=['id1','id2','id3','id4']
df=pd.DataFrame(data,index=index)
df
1.at(单值查询-loc)
访问行/列标签对的单个值。
与loc类似,两者都提供基于标签的查找。如果只需要在DataFrame或Series中获取或设置单个值,使用at最为便捷。
df.at['id3','city']
也可以快速修改对应值:
df.at['id3','city']='江苏'
df
2.iat(单值查询-iloc)
按整数位置访问行/列对的单个值。
与iloc类似,两者都提供基于整数的查找。如果只需要在DataFrame或Series中获取或设置单个值,使用iat最为便捷。
df.iat[0,2]
当然修改单值也是一样的:
df.iat[0,2]='小数据'
df
3. loc(行/列名索引查询)
loc可太常用了,我更喜欢用iloc。通过标签或布尔数组访问一组行和列。.loc[]主要基于标签,但也可以与布尔数组一起使用。
允许的输入包括:
- 单个标签,例如5或“A”(注意,5被解释为索引的标签,而不是索引中的整数位置)。
- 标签的列表或数组,例如[‘A’、‘b’、‘c’]。
- 带有标签的切片对象,例如“A”:“f”。
- 与被切片的轴长度相同的布尔数组,例如[True,False,True]。
- 可对齐的布尔级数。键的索引将在屏蔽之前对齐。
- 可对齐的索引。返回选择的索引将作为输入。
- 一个带有一个参数(调用Series或DataFrame)的可调用函数,该函数返回有效的索引输出(上述之一)
1.单个标签
df.loc['id1','city']
2. 标签的列表或数组
df.loc[['id1','id2'],:]
3.带有标签的切片对象
df.loc['id1':'id2',:]
4.与被切片的轴长度相同的布尔数组
df.loc[[True,False,True,False],:]
等下面将到条件查询会更加细致的讲解。
4. iloc(行/列索引查询)
iloc在工程是由于是可以根据对应数字来访问索引的,故可以用作很多复杂查询聚合里面。
纯整数基于位置的索引,用于按位置进行选择。.iloc[]主要基于整数位置(从0到轴的长度-1),但也可以与布尔数组一起使用。
允许的输入包括:
- 整数,例如5。
- 整数的列表或数组,例如[4,3,0]。
- 带有整数的切片对象,例如1:7。
- 布尔数组。
- 一个带有一个参数(调用Series或DataFrame)的可调用函数,该函数返回有效的索引输出(上述之一)。当您没有对调用对象的引用,但希望基于某个值进行选择时,这在方法链中非常有用。
- 行和列索引的元组。元组元素由上述输入之一组成,例如(0,1)。
1.索引值
df.iloc[1,1]
2.整数的列表或数组
df.iloc[[0,1],1]
3.带有整数的切片对象
df.iloc[0:1,0:2]
等下面将到条件查询会更加细致的讲解。
二、按条件查询
若是没有复杂查询的话,dataframe支持直接嵌套Ture,False矩阵来实现查询:
单条件查询
例如查询城市为北京的数据:
df[df.city=='北京']
df.loc[df.city=='北京']
df.loc[lambda df: df['city'] == '北京']
多条件查询
查询领域为数据分析且城市在上海的:
df[(df.territory=='数据分析')&(df.city=='上海')]
df.loc[(df.territory=='数据分析')&(df.city=='上海')]
df.loc[lambda df:(df.territory=='数据分析')&(df.city=='上海')]
嵌套筛选
主要通过iloc和lambda实现。
比如我只想要奇数列的数据:
df.iloc[:,[(i-1)%2==1 for i in range(1,len(df.columns)+1)]]
或者可以编写一个函数实现想要的功能:
def find_data(df):
return df['city']=='北京'
df.loc[find_data]