import pandas as pd datas = [ {'name': '王小一', 'hight': 171, 'weight': 100}, {'name': '李小二', 'hight': 163, 'weight': 200}, {'name': '张小三', 'hight': 152, 'weight': 67}, {'name': '郭小四', 'hight': 148, 'weight': 77}, {'name': '钱小五', 'hight': 189, 'weight': 87}, {'name': '孙小六', 'hight': 155, 'weight': 82}, {'name': '周小七', 'hight': 169, 'weight': 74}, {'name': '吴小八', 'hight': 170, 'weight': 68}, {'name': '郑小九', 'hight': 173, 'weight': 65}, {'name': '冯老十', 'hight': 175, 'weight': 64} ]
df = pd.DataFrame(datas)
运行效果图
现在想要筛选hight字段大于160的所有数据
代码可以这样写:
df[160< df['hight']]
运行效果图
现在想筛选所有 160 < hight < 170的数据
如果使用Python的链式比对,就会导致报错:
报错图
此时,代码需要改写为很难看的一种样式:
df[(160< df['hight']) & (df['hight'] <170)]
运行效果图
这样写虽然能够解决问题,但是代码可读性不好。
为了提高可读性,可以使用pandas自带的.query方法。
当我们要查询hight > 160的数据时,可以这样写:
df.query('hight>160')
运行效果图
当我们要查询160 < hight < 170的时候,可以这样写:
df.query('160<hight<170')
运行效果图
甚至还支持多个参数链式查询,例如筛选所有160<hight<170并且weight<80的数据:
df.query('160<hight<170').query('weight<80')
运行效果图