Pandas查询数据的几种方法
- df.loc方法,根据行、列的标签值查询 (# .loc既能查询,又能覆盖写入)
- df.iloc方法,根据行、列的数字位置查询
- df.where方法
- df.query方法
Pandas使用df.loc查询数据的方法
- 使用单个label值查询数据
- 使用值列表批量查询数据
- 使用数值区间进行范围查询
- 使用条件表达式查询
- 调用函数查询
Attention!
- 以上查询方法,既适用于行,也适用于列
- 注意观察降维 DataFrame > Series > Value
1. 使用单个label值查询数据
每一行和每一列,都可以只传入单个值,实现精确匹配(这里可以发现降维的效果)
# 得到DataFrame中某个单元格的单个值
df.loc['行名称','列名称']
# 得到一个Series(这里传入的列名是一个值列表)
df.loc['行名称',['列名称_1','列名称_2']]
2. 使用值列表批量查询
# 得到一个DataFrame
df.loc[['行名称_1','行名称_2'],['列名称_1','列名称_2']]
3. 使用数值区间进行范围查询
这里注意,应用于 loc 的区间既包含开始,也包含结束。
# 行index按区间
df.loc['行名称_1':'行名称_2','列名称']
# 列index按区间
df.loc['行名称','列名称_1':'列名称_2']
# 行列index均按区间
df.loc['行名称_1':'行名称_2','列名称_1':'列名称_2']
这里我们可以看到,传入的行、列值不再是一个列表,而是以 “ :” 连接的一个区间,并且需要注意的是传入的值并不是索引号,而是索引标签值,按照行、列在DataFrame中的顺序进行区间分割
4. 使用条件表达式查询
使用条件表达式可以返回一个布尔列表,这个列表的长度等于行数或者列数(一般常用于行)
# 进行一个简单的查询,温度低于10度的所有记录
df.loc[df['WenDu'] < 10,:] # df['WenDu']取出温度这一列进行条件匹配,后面的冒号代表查询所有列
# 多条件查询
df.loc[(df['WenDu'] < 10) & (df['WenDu'] > 0),:]
df['WenDu'] < 10 返回的是一个包含布尔值的Series, < 10 的记录为True,反之为False。
5. 调用函数查询
# 直接写 lambda 表达式
df.loc[lambda df : (df['WenDu'] < 10) & (df['WenDu'] > 0),:]
当按照行进行筛选时,loc方法会将每一行的Series传给lambda的df变量,同样会得到一个布尔结果,用于筛选行(或列)数据。
也可以自己编写函数,但要注意的是在loc中使用函数时只需要输入函数名即可,函数本身也可以当成变量传递,其参数取决于外部的变量。