zoukankan      html  css  js  c++  java
  • Pandas 查询示例 Pandas .query() 方法过滤数据 数据帧中类似 SQL 的查询

    Python 是一种用于进行数据分析的出色语言,主要是因为以数据为中心的 Python 包的奇妙生态系统。Pandas是使导入和分析数据更容易的软件包之一。

    分析数据需要大量的过滤操作。Pandas 提供了许多过滤数据框的方法,它Dataframe.query()就是其中之一。

     注意极客!通过Python 编程基础课程巩固您的基础并学习基础知识。  

    首先,您的面试准备通过Python DS课程增强您的数据结构概念要开始您的机器学习之旅,请加入机器学习 - 基础课程

    语法: DataFrame.query(expr, inplace=False, **kwargs)

    参数:
    expr:过滤数据的字符串形式的表达式。
    就地:如果 True
    kwargs:其他关键字参数,则在原始数据框中进行更改

    返回类型:过滤后的数据框

    要下载使用的 CSV 文件,请单击此处。

    注意: Dataframe.query()方法仅在列名没有任何空格时才有效。所以在应用该方法之前,列名中的空格被替换为“_”

    示例 #1:单条件过滤

    在这个例子中,数据是根据单一条件过滤的。在应用 query() 方法之前,列名中的空格已被替换为“_”。

     
    # importing pandas package
    import pandas as pd
      
    # making data frame from csv file 
    data = pd.read_csv("employees.csv")
      
    # replacing blank spaces with '_' 
    data.columns =[column.replace(" ", "_") for column in data.columns]
      
    # filtering with query method
    data.query('Senior_Management == True', inplace = True)
      
    # display
    data

    输出:
    如输出图像所示,数据现在只有高级管理为真的行。

     
    示例 2:多条件过滤

    在此示例中,数据帧已在多个条件下进行过滤。在应用 query() 方法之前,列名中的空格已被替换为“_”。

     
    # importing pandas package
    import pandas as pd
      
    # making data frame from csv file 
    data = pd.read_csv("employees.csv")
      
    # replacing blank spaces with '_' 
    data.columns =[column.replace(" ", "_") for column in data.columns]
      
    # filtering with query method
    data.query('Senior_Management == True 
                and Gender =="Male" and Team =="Marketing" 
                and First_Name =="Johnny"', inplace = True)
      
    # display
    data

    输出:
    如输出图像所示,根据应用的过滤器只返回了两行。

    为什么使用查询

    因为它使您能够就地创建视图和过滤器。

    对于数值运算,它也比纯 python 更快。1

    import pandas as pd
    
    # using filters needs two steps
    # one to assign the dataframe to a variable
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK',np.nan]
    })
    
    # another one to perform the filter
    df[df['country']=='USA']
    

    但是您可以在一个步骤中定义数据帧并对其进行查询(内存会立即释放,因为您没有创建任何临时变量)

    # this is equivalent to the code above
    # and uses no intermediate variables
    pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK',np.nan]
    }).query("country == 'USA'")
    
     

    Python变量

    在查询中引用外部变量,请使用@variable_name

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK',np.nan],
        'age':[23,45,45]
    })
    
    target_age = 45
    
    df.query('age == @target_age')
    

    或运算符

    只需使用or不要忘记括号。

    import pandas as pd
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK', 'USA'],
        'age':[23,45,45]
    })
    
    df.query("(name=='john') or (country=='UK')")
    
    源数据框之前:源数据框
      
    后过滤器或运算符之后:只有 name'john'
    或 country 的'UK'

    AND 运算符

    只需使用and不要忘记括号。

    import pandas as pd
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK', 'USA'],
        'age':[23,45,45]
    })
    
    df.query("(country=='USA') and (age==23)")
    
    源数据框包含所有行的源数据框
      
    后加运算符过滤器之后:只有一行有
    country='USA'
    age =23

    多重条件

    有关更多示例,请参阅上面的and 运算符或运算符

    • 示例: AND 运算符

    df.query((col1 == 1) and (col2 == 2))

    • 示例: OR 运算符

    df.query((col1 == 1) or (col2 == 2))

    数组中的值

    将值放入 python 数组中并使用in @myvar

    import pandas as pd
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK', 'USA'],
        'age':[23,45,45]
    })
    
    names_array = ['john','anna']
    
    df.query('name in @names_array')
    
    源数据框源数据框
      
    where-column-is-in-array名称所在的行 ['john', 'anna']
     

    不在数组中

    将值放入 python 数组中并使用not in @myvar

    import pandas as pd
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK', 'USA'],
        'age':[23,45,45]
    })
    
    invalid_array = ['anna']
    
    df.query('name not in @invalid_array')
    
    源数据框源数据框:所有行
      
    where-column-not-in-array名称不在的选定行 ['anna']

    转义列名

    转义特殊字符(例如空格),请将列名称括在反引号中:'`'

    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country of birth':['USA','UK', 'USA'],
        'age':[23,45,45]
    })
    
    df.query('`country of birth` == "UK"')
    
    源数据框Source dataframe: one of the column
    names has spaces in it
      
    过滤后列名称空间Selected rows where
    country of origin equals 'UK'

    Is null

    To filter the dataframe where a column value is NULL, use .isnull()

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK',np.nan]
    })
    
    df.query('country.isnull()')
    
    原始数据框Original Dataframe
             
    查询何处为空Equivalent to:
    "where country is NULL"

    Is not null

    Use .notnull()

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        'name':['john','david','anna'],
        'country':['USA','UK',np.nan]
    })
    
    df.query('country.notnull()')
    
    原始数据框Original Dataframe
             
    查询何处为空Equivalent to:
    "where country is NOT NULL"

    Like

    Although like is not supported as a keyword in query, we can simulate it using col.str.contains("pattern"):

    import pandas as pd
    
    df = pd.DataFrame({
        'col1':['foo','bar','baz','quux']
    })
    
    df.query('col1.str.contains("ba")')
    
    源数据框Source dataframe
      
    类似查询后Result: filter where col1 matches "ba"

    1 It uses numexpr under the hood: https://github.com/pydata/numexpr

  • 相关阅读:
    js冒泡排序
    HTML5 canvas 计时器
    centos 6.4安装杀毒软件clamAV 0.98[转]
    PHP大文件下载
    如何在 Eclipse 中使用插件构建 PHP 开发环境[转]
    CentOS 单用户模式:修改Root密码和grub加密[转]
    CentOS 6.0 VNC远程桌面配置[转]
    gprof使用介绍 (gcc -pg) [转]
    VMware NAT端口映射外网访问虚拟机linux
    shell判断文件是否存在[转]
  • 原文地址:https://www.cnblogs.com/a00ium/p/15543639.html
Copyright © 2011-2022 走看看