栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python | Pandas | 筛选

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python | Pandas | 筛选

本文主要介绍如何使用 Pandas 对值进行筛选 1。

Updated: 2022 / 6 / 21

Python | Pandas | 筛选
  • 表达式
    • 其他函数
      • isin
        • 1.
        • 2.
      • isna/notna
        • 1.
        • 2.
  • query
    • 运算符
    • 表达式
    • 空值
      • isnull / notnull
      • == / !=
  • 参考链接


表达式 其他函数 isin

参考此处 2

1.
  • 应用场景:
    一个list中存了很多个值,需要提取出在这个列表中出现的值在目标 Dataframe 中的所有行
  • 方法:
X = data[data['X'].isin(['A', 'B', 'C', 'D'])]
# 				Unamed:22		Unamed:23
# 561	NaN			  NaN			  NaN	
# ...	...			  ...			  ...
# 1071  7.7			70805			  NaN
# 1072  8.0			80851			  NaN
# 
# type(X)
# 
#
# X.dtype
# AttributeError: 'DataFrame' object has no attribute 'dtype' 
X = data.loc[data['X'].isin(['A', 'B', 'C', 'D'])]

2.
  • 应用场景:
    一个list中存了很多个值,需要判断在这个列表中出现的值是否在目标 Dataframe 中的所有行
  • 方法:
X = data['X'].isin(['A', 'B', 'C', 'D'])
# 0 	True
# 1 	False
# ...
# 1076  True
# 1077 	False
# 
# type(X)
# 
# 
# X.dtype
# bool

isna/notna

参考此处 3


1.
  • 应用场景:
    选择列值为null/None/nan的行
  • 方法:
X = df[df[2].isna()]
# 0		NaN
# 1 	NaN
# ... 	...
# 105	NaN
# 106	NaN
#
# type(X)
# 
# 
# X[2].dtype
# object

2.
  • 应用场景:
    选择列值不为null/None/nan的行
  • 方法:
df[df[2].notna()]
# 1869		ABCD
# 10712		EFGH
# ...		...
# 10723		IJK
# 10766		LMN
#
# type(X)
# 
# 
# X[2].dtype
# object

query

关于更多内容,可查看 df.query 数据查询的方法详细介绍 4


运算符
df.query('Q1 > Q2 > 90') # 直接写类型 sql where 语句
df.query('Q1 + Q2 > 180')
df.query('Q1 == Q2')
df.query('(Q1<50) & (Q2>40) and (Q3>90)')
df.query('Q1 > Q2 > Q3 > Q4')

表达式
df.query('team != "C"')
df.query('team in ["A","B"]')
df.query('team not in ("E","A","B")')
df.query('team == ["A","B"]')
df.query('team != ["A","B"]')
df.query('name.str.contains("am")') # 包含 am 字符

空值

engine = 'python' 的作用 5 是以 python 方式解读表达式,而不是以 pandas 。

对于是否添加 enginer = 'python' 取决于所筛选列的值的数据类型 6:

  • 如果是 floats, 它具备原生 NaN, 则可以不添加;
  • 如果是 str 或者 int,则需添加。
isnull / notnull
df.query('col1.isnull()', engine='python')
# 		col1
# 21     NaN
# 42 	 NaN
# ...
# 60 	 NaN

df.query('col1.notnull()', engine='python')
# 		col1
# 31    ABCD
# 32 	EFGH
# ...
# 65 	HIJK

isna() 和 notna() 同理,用法相似。


== / !=

在 pandas 和 numpy 中,NaN 不等于 NaN。
所以如果想检验一个单元格是否有 NaN 值,可以通过以下方式 6:

  • cell_value != cell_value
    该表达式只对 NaN 值成立
    ( 3 !=3 是 False 的 但是 NaN != NaN 是 True 的),所以 query 只会返回 NaNs。
  • cell_value == cell_value
    该表达式只对非 NaNs 值成立
    ( 3 == 3 是 True 的 但是 NaN == NaN 是 False 的), 所以 query 只会返回非 NaNs。
df.query('col1 == col')
# 		col1
# 31    ABCD
# 32 	EFGH
# ...
# 65 	HIJK

df.query('col1 != col1')
# 		col1
# 21     NaN
# 42 	 NaN
# ...
# 60 	 NaN

# 对于名称中带有空格的列,可以使用反引号引起来
df.query('B == `team name`')

# 支持传入变量,如:大于平均分40分的
a = df.Q1.mean()
df.query('Q1 > @a+40')
df.query('Q1 > `Q2`+@a')

# df.eval() 用法与 df.query 类似
df[df.eval("Q1 > 90 > Q3 > 10")]
df[df.eval("Q1 > `Q2`+@a")]

参考链接
  1. pandas 查询筛选数据 ↩︎

  2. pandas通过list筛选行 ↩︎

  3. 【pandas】dataframe根据某列是否是null筛选数据 ↩︎

  4. pandas query() 表达式查询 ↩︎

  5. pandas.eval ↩︎

  6. Querying for NaN and other names in Pandas ↩︎ ↩︎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号