对DataFrame的一列进行逻辑计,会产生一个对应的由布尔值组成的Series,真假值由此位上的数据 是否满足逻辑表达式决定。
data["语文"] > 60
data["数学"] == 100
切片([])、.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,显示语文及其后所有列
注意 : 在进行或(|)、与(&)、非(~)运算时,各个独 立逻辑表达式需要用括号括起来
可以在表达式处使用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结尾
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'])