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

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