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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jevious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值