• 4.pandas的进阶查询


    简单的查询其实根本不能满足实际开发的需求

    需求可能是让你查一下2018年的销售额啊,2019年温度超过30℃的天数啊等等的

    这些需求都是有异曲同工的,就是带条件的查询

    这里我们先自己设计一个表格,并将其读取出来

    import pandas as pd
    
    df = pd.read_excel('test1.xlsx')
    print(df)
    
             data wendu_min wendu_max weather  fengji
    0  2020-01-01        1℃       15℃       晴       1
    1  2020-01-02        1℃       16℃      多云       2
    2  2020-01-03        1℃       17℃      小雨       4
    3  2020-01-04        4℃       18℃       阴       2
    4  2020-01-05        1℃       19℃      大雨       1
    5  2020-01-06        3℃       20℃      小雨       3
    6  2020-01-07        1℃       21℃       晴       5
    7  2020-01-08        1℃       22℃      多云       2
    8  2020-01-09        1℃       23℃       阴       1
    9  2020-01-10        0℃       24℃      小雨       3
    10 2020-01-11        2℃       25℃      多云       4
    
    

    为了查询方便,所以我将日期当做查询的索引

    df.set_index('data', inplace=True)
    

    这个inplace是指修改可以及时看到

               wendu_min wendu_max weather  fengji
    data                                          
    2020-01-01        1℃       15℃       晴       1
    2020-01-02        1℃       16℃      多云       2
    2020-01-03        1℃       17℃      小雨       4
    2020-01-04        4℃       18℃       阴       2
    2020-01-05        1℃       19℃      大雨       1
    2020-01-06        3℃       20℃      小雨       3
    2020-01-07        1℃       21℃       晴       5
    2020-01-08        1℃       22℃      多云       2
    2020-01-09        1℃       23℃       阴       1
    2020-01-10        0℃       24℃      小雨       3
    2020-01-11        2℃       25℃      多云       4
    
    

    像这种温度带着的℃,不便于数据的分析,所以我们在刚开始的时候,可以将其去掉

    df['wendu_min'] = df['wendu_min'].str.replace('℃', '').astype('int32')
    df['wendu_max'] = df['wendu_max'].str.replace('℃', '').astype('int32')
    
                wendu_min  wendu_max weather  fengji
    data                                            
    2020-01-01          1         15       晴       1
    2020-01-02          1         16      多云       2
    2020-01-03          1         17      小雨       4
    2020-01-04          4         18       阴       2
    2020-01-05          1         19      大雨       1
    2020-01-06          3         20      小雨       3
    2020-01-07          1         21       晴       5
    2020-01-08          1         22      多云       2
    2020-01-09          1         23       阴       1
    2020-01-10          0         24      小雨       3
    2020-01-11          2         25      多云       4
    
    

    数据都处理完毕,现在就开始进行查询

    查询单个数据

    我想查一月9号的最高温度

    df.loc['2020-01-09', 'wendu_max']
    
    23
    

    先传行索引,再传列索引

    查询多个数据

    我想查一月6号到一月10号之间的所有数据

    df.loc['2020-01-06':'2020-01-10', :]
    
                wendu_min  wendu_max weather  fengji
    data                                            
    2020-01-06          3         20      小雨       3
    2020-01-07          1         21       晴       5
    2020-01-08          1         22      多云       2
    2020-01-09          1         23       阴       1
    2020-01-10          0         24      小雨       3
    

    :代表着所有的数据

    使用条件查询

    我想得到最低温度大于1℃的数据

    df.loc[df['wendu_min'] > 1, :]
    
                wendu_min  wendu_max weather  fengji
    data                                            
    2020-01-04          4         18       阴       2
    2020-01-06          3         20      小雨       3
    2020-01-11          2         25      多云       4
    

    我想要最低温度大于1℃,最高温度小于25℃的天气

    df.loc[(df['wendu_min'] > 1) & (df['wendu_max'] < 25), :]
    
                wendu_min  wendu_max weather  fengji
    data                                            
    2020-01-04          4         18       阴       2
    2020-01-06          3         20      小雨       3
    

    多个条件要用括号括起来,然后用&连接

    使用函数查询

    使用lambda表达式

    如果lambda不太熟练就跳过这里

    df.loc[lambda df: (df['wendu_min'] > 1) & (df['wendu_max'] < 25), :]
    
                wendu_min  wendu_max weather  fengji
    data                                            
    2020-01-04          4         18       阴       2
    2020-01-06          3         20      小雨       3
    

    自己编写的函数查询

    我认为最低温度大于1℃,最高温度小于25℃的就是好天气,所以先写一个函数

    def goodWeather(df):
        return (df['wendu_min'] > 1) & (df['wendu_max'] < 25)
    

    然后再使用这个函数进行数据查询

    df.loc[goodWeather, :]
    
                wendu_min  wendu_max weather  fengji
    data                                            
    2020-01-04          4         18       阴       2
    2020-01-06          3         20      小雨       3
    

    注意这里放的是函数名,而不是函数名()

  • 相关阅读:
    ORA00845 MEMORY_TARGET not supported on this system (oracle11g for asianux3 )
    文件处理命令
    网络通信
    Chapter05Usage and Configuration of the Oracle Shared Server
    压缩解压缩命令
    PAT 1088 Rational Arithmetic[模拟分数的加减乘除][难]
    知识点最小二乘学习与正规表达式
    Missing Number[回溯][难]
    PAT 1065 A+B and C[大数运算][溢出]
    PAT 1055 The World's Richest[排序][如何不超时]
  • 原文地址:https://www.cnblogs.com/jevious/p/13375622.html
Copyright © 2020-2023  润新知