一、常用数据查询方式:

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"'))