一、常用数据查询方式:
1、df.loc():根据行、列的标签。即能查也能写入,推荐此方法
2、df.iloc():根据行、列的数字位置
3、df.where
4、df.query
二、使用df.loc()查询数据的方法
1、使用单个label值
2、使用值列表
3、使用数值区间范围
4、使用条件语句
5、调用函数
注意:
1、以上方法,即用于行,也用于列
2、维度顺序是:dataframe>series>值
df.loc()用法可以参考:https://blog.csdn.net/weixin_47139649/article/details/126854365
三、示例
1、数据预处理:包括修改xindex、统一值的单位和类型
import pandas as pd df=pd.read_csv("./beijing_tianqi/beijing_tianqi_2018.csv") df.head() ''' ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel 0 2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 良 2 1 2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 优 1 2 2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 优 1 3 2018-01-04 0℃ -8℃ 阴 东北风 1-2级 28 优 1 4 2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 优 1 ''' '''数据预处理''' df.set_index('ymd',inplace=True) #设定索引为日期,方便按日期进行筛选 df.index '''Index(['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() ''' bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel ymd 2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 良 2 2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 优 1 2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 优 1 2018-01-04 0℃ -8℃ 阴 东北风 1-2级 28 优 1 2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 优 1''' #将温度的℃去掉 df.loc[:,'bWendu']=df['bWendu'].str.replace('℃','').astype('int32')#df.loc(:'列名')表示筛选出某一列 df.loc[:,'yWendu']=df['yWendu'].str.replace('℃','').astype('int32') ''' bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel ymd 2018-01-01 3 -6 晴~多云 东北风 1-2级 59 良 2 2018-01-02 2 -5 阴~多云 东北风 1-2级 49 优 1 2018-01-03 2 -5 多云 北风 1-2级 28 优 1 2018-01-04 0 -8 阴 东北风 1-2级 28 优 1 2018-01-05 3 -6 多云~晴 西北风 1-2级 50 优 1'''
2、数据查询:
1)使用单个label值查询:得到一个单元格的值,是个值
df.loc['2018-01-03','bWendu']
2)使用值列表查询:得到一维或二维维数据,series或dataframe
list_=['2018-01-01','2018-01-04','2018-01-05'] df.loc[list_,'bWendu'] '''ymd 2018-01-01 3 2018-01-04 0 2018-01-05 3 Name: bWendu, dtype: int32'''
df.loc[list_,['bWendu','yWendu']] ''' bWendu yWendu ymd 2018-01-01 3 -6 2018-01-04 0 -8 2018-01-05 3 -6'''
df.loc[:,['bWendu','yWendu']]#得到所有行
3)使用区间值查询
#行和列都可以是区间 print(df.loc[['2018-01-01','2018-01-03'],['bWendu','yWendu','tianqi']])
4)使用条件语句
#以下两种条件语句是等价的,需要加深理解 print(df.loc[(df['bWendu']>6) & (df['yWendu']>-4) &(df['aqiInfo']=='优'),:]) print(df.loc[lambda df:(df['bWendu']>6) & (df['yWendu']>-4) &(df['aqiInfo']=='优'),:])
5)使用query()函数
query()函数更好用,更灵活
https://blog.csdn.net/fengdu78/article/details/119259242
https://zhuanlan.zhihu.com/p/354392061
print(df.query('bWendu>0 & ymd <"2018-02-01"'))