Pandas 常用按照查询条件筛选数据

  • Post author:
  • Post category:其他



创建一个DataFrame

import pandas as pd
data = {'name':['张三', '李四', '王五', '赵六'],'age':[20, 21, 22, 23], 'gender': [0, 1, 1, 1], 'stature': [165, 189, 178, 160], 'year': [2000, 2002, 2003, 1993]}
df = pd.DataFrame(data)
print (df)

运行结果如下:

  name  age  gender  stature  year
0   张三   20       0      165  2000
1   李四   21       1      189  2002
2   王五   22       1      178  2003
3   赵六   23       1      160  1993


常用的筛选方法:


  • []

    :直接在DataFrame的

    []

    中写筛选条件或者组合条件,组合条件之间可以使用逻辑符号

    & |


  • loc/iloc



    loc

    按照标签值(列名和行索引取值)访问,

    iloc

    按照数字索引访问,均支持单值访问或切片查询,除此之外,

    loc

    还可以

    指定返回的列变量

  • isin

    :当查询条件不是一个取值范围,而是一些具体的值,就需要使用

    isin

    了,也可以做

    取反

    操作,在筛选条件前加

    ~


  • str.contains

    :实现字符串的模糊筛选,类似sql语句中的

    like

  • where

    :接受的条件需要是布尔型,如果不满足条件,会被赋值为

    默认的NaN

    或者

    指定其他值

  • query

    :所有的筛选条件要在

    ' '

    之内

  • filter

    :不筛选具体数据,而是筛选特定的行或列

  • any

    :如果至少有一个值为

    True

    ,结果便是

    True

    。一般需要和其他操作配合使用,比如查看每列的空值情况

  • all

    :需要所有的值都为

    True

    ,结果才为

    True



一、 筛选指定的列


筛选

name



# 1. 直接筛选,返回的是Series类型
df['name']

# 2. 使用loc筛选,返回的是DataFrame类型
df.loc[:, ['name']]

# 3. 使用filter,返回的是DataFrame类型
df.filter(items=['name'])

查询结果如下:

在这里插入图片描述


筛选

name



stature



# 1. 直接筛选
df[['name', 'stature']]

# 2. 使用loc筛选
df.loc[:, ['name', 'stature']]

# 3. 使用filter
df.filter(items=['name', 'stature'])

查询结果如下:

在这里插入图片描述



二、 按照条件筛选



2.1 单条件筛选


筛选姓名为

王五

的所有行

# 1. 直接筛选
df[df['name']=='王五']

# 2. 使用loc筛选
df.loc[df['name']=='王五']

# 3. 使用query查询,注意条件里有''时,两边要用""包住。
df.query("name=='王五'")

查询结果如下:

在这里插入图片描述



2.2 多条件组合筛选


筛选

gender

为1,并且姓名为

王五

的所有行

# 1. 直接筛选
df[(df['name']=='王五') & (df['gender']==1)]

# 2. 使用loc筛选
df.loc[(df['name']=='王五') & (df['gender']==1)]

# 3. 使用query查询,注意条件里有''时,两边要用""包住。
df.query("name=='王五' & gender==1")

查询结果如下:

在这里插入图片描述


筛选

gender

为1,并且姓名为

王五



赵六

的所有行

# 1. 直接筛选
df[(df['name']=='王五') | (df['name']=='赵六') & (df['gender']==1)]

# 2. 使用loc筛选
df.loc[(df['name']=='王五') | (df['name']=='赵六') & (df['gender']==1)]

# 3. 使用query查询,注意条件里有''时,两边要用""包住。
df.query("name=='王五' | name=='赵六' & gender==1")

# 4. 使用isin()筛选
df[df['name'].isin(['王五', '赵六']) & (df['gender']==1)]

在这里插入图片描述


筛选

name

中包含



的所有行

# 使用str.contains来筛选
df[df['name'].str.contains('王')]

查询结果如下:

在这里插入图片描述


筛选

name

中包含







的所有行

# 使用str.contains来筛选
df[df['name'].str.contains('王|赵')]

查询结果如下:

在这里插入图片描述


查看每列的空值情况:

# 1. 查看每列是否有空值
df.isnull().any(axis=0)

'''
name       False
age        False
gender     False
stature    False
year       False
dtype: bool
'''

# 2. 查看含有空值的行数
df.isnull().any(axis=1).sum()
# 0

如上按照条件筛选基本可以满足日常开发需要,pandas中条件筛选比较灵活,还有很多情况没有演示,大家可以自行组合各种筛选条件进行尝试。



版权声明:本文为weixin_44639720原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。