python pandas 数据查找_Pandas系列-查询数据的5种方法

本文介绍了Python Pandas库中用于查询数据的5种方法:df.loc、df.iloc、df.where、df.query以及通过调用函数进行查询。通过实例详细讲解了如何使用这些方法进行单个值查询、批量查询、数值区间查询、条件表达式查询和使用自定义函数查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天没有漂亮的PPT,只有干货!!

Pandas查询数据的几种方法df.loc方法,根据行、列的标签值查询

df.iloc方法,根据行、列的数字位置查询

df.where方法

df.query方法

.loc既能查询,又能覆盖写入,强烈推荐!

Pandas使用df.loc查询数据的方法使用单个label值查询数据

使用值列表批量查询

使用数值区间进行范围查询

使用条件表达式查询

调用函数查询

注意以上查询方法,既适用于行,也适用于列

注意观察降维dataFrame>Series>值

微信公众号:【蚂蚁学Python】,Python原创免费视频分享import pandas as pd

0、读取数据

数据为北京2018年全年天气预报

该数据的爬虫教程参见我的Python爬虫系列视频课程df = pd.read_csv("./datas/beijing_tianqi/beijing_tianqi_2018.csv")df.head()

ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel02018-01-013℃-6℃晴~多云东北风1-2级59良2

12018-01-022℃-5℃阴~多云东北风1-2级49优1

22018-01-032℃-5℃多云北风1-2级28优1

32018-01-040℃-8℃阴东北风1-2级28优1

42018-01-053℃-6℃多云~晴西北风1-2级50优1# 设定索引为日期,方便按日期筛选

df.set_index('ymd', inplace=True)# 时间序列见后续课程,本次按字符串处理

df.indexIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05',

'2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10',

...

'2018-12-22', '2018-12-23', '2018-12-24', '2018-12-25', '2018-12-26',

'2018-12-27', '2018-12-28', '2018-12-29', '2018-12-30', '2018-12-31'],

dtype='object', name='ymd', length=365)df.head()

bWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel

ymd2018-01-013℃-6℃晴~多云东北风1-2级59良2

2018-01-022℃-5℃阴~多云东北风1-2级49优1

2018-01-032℃-5℃多云北风1-2级28优1

2018-01-040℃-8℃阴东北风1-2级28优1

2018-01-053℃-6℃多云~晴西北风1-2级50优1# 替换掉温度的后缀℃

df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')

df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')df.dtypesbWendu int32

yWendu int32

tianqi object

fengxiang object

fengli object

aqi int64

aqiInfo object

aqiLevel int64

dtype: objectdf.head()

bWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel

ymd2018-01-013-6晴~多云东北风1-2级59良2

2018-01-022-5阴~多云东北风1-2级49优1

2018-01-032-5多云北风1-2级28优1

2018-01-040-8阴东北风1-2级28优1

2018-01-053-6多云~晴西北风1-2级50优1

1、使用单个label值查询数据

行或者列,都可以只传入单个值,实现精确匹配# 得到单个值

df.loc['2018-01-03', 'bWendu']2# 得到一个Series

df.loc['2018-01-03', ['bWendu', 'yWendu']]bWendu 2

yWendu -5

Name: 2018-01-03, dtype: object

2、使用值列表批量查询# 得到Series

df.loc[['2018-01-03','2018-01-04','2018-01-05'], 'bWendu']ymd

2018-01-03 2

2018-01-04 0

2018-01-05 3

Name: bWendu, dtype: int32# 得到DataFrame

df.loc[['2018-01-03','2018-01-04','2018-01-05'], ['bWendu', 'yWendu']]

bWenduyWendu

ymd2018-01-032-5

2018-01-040-8

2018-01-053-6

3、使用数值区间进行范围查询

注意:区间既包含开始,也包含结束# 行index按区间

df.loc['2018-01-03':'2018-01-05', 'bWendu']ymd

2018-01-03 2

2018-01-04 0

2018-01-05 3

Name: bWendu, dtype: int32# 列index按区间

df.loc['2018-01-03', 'bWendu':'fengxiang']bWendu 2

yWendu -5

tianqi 多云

fengxiang 北风

Name: 2018-01-03, dtype: object# 行和列都按区间查询

df.loc['2018-01-03':'2018-01-05', 'bWendu':'fengxiang']

bWenduyWendutianqifengxiang

ymd2018-01-032-5多云北风

2018-01-040-8阴东北风

2018-01-053-6多云~晴西北风

4、使用条件表达式查询

bool列表的长度得等于行数或者列数

简单条件查询,最低温度低于-10度的列表df.loc[df["yWendu"]

bWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel

ymd2018-01-23-4-12晴西北风3-4级31优1

2018-01-24-4-11晴西南风1-2级34优1

2018-01-25-3-11多云东北风1-2级27优1

2018-12-26-2-11晴~多云东北风2级26优1

2018-12-27-5-12多云~晴西北风3级48优1

2018-12-28-3-11晴西北风3级40优1

2018-12-29-3-12晴西北风2级29优1

2018-12-30-2-11晴~多云东北风1级31优1# 观察一下这里的boolean条件

df["yWendu"]

2018-01-01 False

2018-01-02 False

2018-01-03 False

2018-01-04 False

2018-01-05 False

...

2018-12-27 True

2018-12-28 True

2018-12-29 True

2018-12-30 True

2018-12-31 False

Name: yWendu, Length: 365, dtype: bool

复杂条件查询,查一下我心中的完美天气

注意,组合条件用&符号合并,每个条件判断都得带括号## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据

df.loc[(df["bWendu"]<=30) & (df["yWendu"]>=15) & (df["tianqi"]=='晴') & (df["aqiLevel"]==1), :]

bWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel

ymd2018-08-243020晴北风1-2级40优1

2018-09-072716晴西北风3-4级22优1

我哭,北京好天气这么稀少!!# 再次观察这里的boolean条件

(df["bWendu"]<=30) & (df["yWendu"]>=15) & (df["tianqi"]=='晴') & (df["aqiLevel"]==1)ymd

2018-01-01 False

2018-01-02 False

2018-01-03 False

2018-01-04 False

2018-01-05 False

...

2018-12-27 False

2018-12-28 False

2018-12-29 False

2018-12-30 False

2018-12-31 False

Length: 365, dtype: bool

5、调用函数查询# 直接写lambda表达式

df.loc[lambda df : (df["bWendu"]<=30) & (df["yWendu"]>=15), :]

bWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel

ymd2018-04-282717晴西南风3-4级125轻度污染3

2018-04-293016多云南风3-4级193中度污染4

2018-05-042716晴~多云西南风1-2级86良2

2018-05-092917晴~多云西南风3-4级79良2

2018-05-102618多云南风3-4级118轻度污染3

………………………

2018-09-152615多云北风3-4级42优1

2018-09-172717多云~阴北风1-2级37优1

2018-09-182517阴~多云西南风1-2级50优1

2018-09-192617多云南风1-2级52良2

2018-09-202716多云西南风1-2级63良2

64 rows × 8 columns# 编写自己的函数,查询9月份,空气质量好的数据

def query_my_data(df):

return df.index.str.startswith("2018-09") & df["aqiLevel"]==1

df.loc[query_my_data, :]

bWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel

ymd2018-09-012719阴~小雨南风1-2级50优1

2018-09-043118晴西南风3-4级24优1

2018-09-053119晴~多云西南风3-4级34优1

2018-09-062718多云~晴西北风4-5级37优1

2018-09-072716晴西北风3-4级22优1

2018-09-082715多云~晴北风1-2级28优1

2018-09-132920多云~阴南风1-2级107轻度污染3

2018-09-142819小雨~多云南风1-2级128轻度污染3

2018-09-152615多云北风3-4级42优1

2018-09-162514多云~晴北风1-2级29优1

2018-09-172717多云~阴北风1-2级37优1

2018-09-182517阴~多云西南风1-2级50优1

2018-09-212514晴西北风3-4级50优1

2018-09-222413晴西北风3-4级28优1

2018-09-232312晴西北风4-5级28优1

2018-09-242311晴北风1-2级28优1

2018-09-252412晴~多云南风1-2级44优1

2018-09-292211晴北风3-4级21优1

2018-09-301913多云西北风4-5级22优1

本文的代码地址:https://github.com/peiss/ant-learn-pandas

本文的视频地址:微信公众号:蚂蚁学Python

相关推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值