比较系统的学习 pandas(4)

复杂查询

由于不好描述,就举几个栗子吧,不明白的可以私聊我

1、pnadas 支持逻辑计算与位运算

对DataFrame的一列进行逻辑计,会产生一个对应的由布尔值组成的Series,真假值由此位上的数据 是否满足逻辑表达式决定。

data["语文"] > 60

data["数学"] == 100

2、根据逻辑运算进行筛选数据

切片([])、.loc[]和.iloc[]均支持的逻辑表达式。

data[data['语文'] == 150]
data[~(data['语文'] == 150)]  #语文值不等于150的 
data[data["name"] == '慕晨风'] # 姓名为慕晨风
df[data["语文"] > data["数学"]


# 表达式与切片一致
data.loc[data["语文"] > 90, '语文':] # 语文值大于90,且只显示语文
data.loc[(data["语文"] > 80) & (data["数学"] > 120)] # and关系
data.loc[(data["语文"] > 90) | (data["英语"] < 90)] # or关系
data.loc[data["语文"] == 120]  
data.loc[data['语文'] > 90, '语文':] # 语文大于90,显示语文及其后所有列

注意 : 在进行或(|)、与(&)、非(~)运算时,各个独 立逻辑表达式需要用括号括起来

3、进行函数筛选

可以在表达式处使用lambda函数,默认变量是其操作的对象。如果 操作的对象是一个DataFrame,那么变量就是这个DataFrame;如果是一 个Series,那么就是这个Series

data[lambda data: data['语文'] == 120] # 语文为120

data.loc[:, lambda data: [i for i in data["name"] if '慕' in i]] # 返回 name列中带有 慕 字的名字列表


比较函数(一般不使用)

data.ne() # 不等于 !=
data.le() # 小于等于 <=
data.lt() # 小于 <
data.ge() # 大于等于 >=
data.gt() # 大于 >
data.eq() #等于


eg:   data[data["语文"].eq(150)]



data.isin()

data.isin()   #判断数据是否包含指定内容

data[data.team.isin(['A','B'])] # 包含A、B两组
data[data.isin({'team': ['C', 'D'], 'Q1':[100,120]})] # 复杂查询,其他值为NaN

data.query()

data.query()使用布尔表达式查询DataFrame的列,表达式是一个 字符串,类似于SQL中的where从句,不过它相当灵活

data.query('语文 + 数学 > 180')
df.query('语文 == 英语')

data.filter() 

data.filter()可以对行名和列名进行筛选,支持模糊匹配、正则表达式

data.filter(regex='1$', axis=0) # 正则,索引名以1结尾

4、根据数据类型查询

Pandas提供了一个按列数据类型筛选的功能 df.select_dtypes(include=None, exclude=None),它可以指定包含和不包含 的数据类型,如果只有一个类型,传入字符;如果有多个类型,传入列表.

如果没有满足条件的数据,会返回一个仅有索引的DataFrame。

data.select_dtypes(include=['float64']) # 选择float64型数据

data.select_dtypes(include='bool')

data.select_dtypes(include=['number']) # 只取数字型

data.select_dtypes(exclude=['int']) # 排除int类型

data.select_dtypes(exclude=['datetime64'])

你可能感兴趣的:(数据分析,pandas)