dataframe按值(非索引)查找多行
很多情况下,我们会根据一个dataframe里面的值来查找而不是根据索引来查找。
首先我们创建一个dataframe:
>>> col = ["id","name","sex","age"] >>> name = {1:"chen",2:"wang",3:"hu",4:"lee",5:"liu"}
>>> id = range(1,6)
>>> sex = {1:1,2:0,3:1,4:1,5:0}
>>> age = {1:20,2:18,3:21,4:20,5:18}
>>> data = {"id":id,"name":name,"sex":sex,"age":age} >>> data
{'sex': {1: 1, 2: 0, 3: 1, 4: 1, 5: 0}, 'age': {1: 20, 2: 18, 3: 21, 4: 20, 5: 18}, 'name': {1: 'chen', 2: 'wang', 3: 'hu', 4: 'lee', 5: 'liu'}, 'id': range(1, 6)} >>> df = pd.DataFrame(data,columns=col,index=id)
>>> df
id name sex age
1 1 chen 1 20
2 2 wang 0 18
3 3 hu 1 21
4 4 lee 1 20
5 5 liu 0 18 >>> df = df.set_index("id") >>> df.set_index("id")
name sex age
id
1 chen 1 20
2 wang 0 18
3 hu 1 21
4 lee 1 20
5 liu 0 18
如果我们要选年龄大于等于20岁的,这个好办:
>>> df[df["age"]>=20]
name sex age
id
1 chen 1 20
3 hu 1 21
4 lee 1 20
或者选出所有女生(sex=0的),也好办:
>>> df[df["sex"]==0]
name sex age
id
2 wang 0 18
5 liu 0 18
也可用where,但不太方便:(一般不会这样用)
>>> df.where(df["sex"]==0)
name sex age
id
1 NaN NaN NaN
2 wang 0.0 18.0
3 NaN NaN NaN
4 NaN NaN NaN
5 liu 0.0 18.0
>>> df.where(df["age"]>=20)
name sex age
id
1 chen 1.0 20.0
2 NaN NaN NaN
3 hu 1.0 21.0
4 lee 1.0 20.0
5 NaN NaN NaN
但是如果要按名字来选出,就不能这样了,得用.isin()方法。
>>> select_name = ["chen","lee","liu"] >>> df[df["name"]==select_name]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\Python3\lib\site-packages\pandas\core\ops.py", line 855, in wrapper
res = na_op(values, other)
File "E:\Python3\lib\site-packages\pandas\core\ops.py", line 759, in na_op
result = _comp_method_OBJECT_ARRAY(op, x, y)
File "E:\Python3\lib\site-packages\pandas\core\ops.py", line 737, in _comp_method_OBJECT_ARRAY
result = lib.vec_compare(x, y, op)
File "pandas\lib.pyx", line 868, in pandas.lib.vec_compare (pandas\lib.c:15418)
ValueError: Arrays were different lengths: 5 vs 3
# 可以看到匹配会出错 >>> df[df["name"].isin(select_name)]
name sex age
id
1 chen 1 20
4 lee 1 20
5 liu 0 18
如果要选出既是属于名字里的又是男生(sex=1):
>>> df[df["name"].isin(select_name) & df["sex"]==1]
name sex age
id
1 chen 1 20
4 lee 1 20
这里如果用
>>> df.isin({"name":select_name,"sex":[1]})
name sex age
id
1 True True False
2 False False False
3 False True False
4 True True False
5 True False False >>> df[df.isin({"name":select_name,"sex":[1]})] # 这里得是[1],非1
name sex age
id
1 chen 1.0 NaN
2 NaN NaN NaN
3 NaN 1.0 NaN
4 lee 1.0 NaN
5 liu NaN NaN
好像并不好。
dataframe按值(非索引)查找多行的更多相关文章
- linux shell脚本查找重复行/查找非重复行/去除重复行/重复行统计
转自:http://blog.sina.com.cn/s/blog_6797a6700101pdm7.html 去除重复行 sort file |uniq 查找非重复行 sort file |uniq ...
- Pandas 如何通过获取双(多)重索引获取指定行DataFrame数据
图片看不清楚的话,可以右键选择:“在新标签页中打开图片(I)” 参数 df.loc[(a,b),c]中第一个参数元组为索引内容,a为level0索引对应的内容,b为level1索引对应的内容 因为df ...
- Oracle中NULL值与索引
NULL值是关系数据库系统布尔型(true,false,unknown)中比较特殊类型的一种值,通常称为UNKNOWN或空值,即是未知的,不确定的.由于NULL存在着无数的可能,因此NULL值也不等于 ...
- pandas 对数据帧DataFrame中数据的索引及切片操作
1.创建数据帧 index是行索引,即每一行的名字:columns是列索引,即每一列的名字.建立数据帧时行索引和列索引都需要以列表的形式传入. import pandas as pd df = pd. ...
- 非索引列上的统计 <第二篇>
非索引列上的统计 有时候,可能在连接或过滤条件中的列上没有索引.即使对这种非索引列,如果查询优化器知道这些列的数据分布(统计),它也很可能做出最佳的选择. 除了索引上的统计,SQL Server可以在 ...
- 第十二章——SQLServer统计信息(2)——非索引键上统计信息的影响
原文:第十二章--SQLServer统计信息(2)--非索引键上统计信息的影响 前言: 索引对性能方面总是扮演着一个重要的角色,实际上,查询优化器首先检查谓词上的统计信息,然后才决定用什么索引.一般情 ...
- 在DataFrame数据表里面提取需要的行
在DataFrame数据表里面提取需要的行 代码功能: 在DataFrame表格中使用loc(),得到我们想要的行,然后根据某一列元素的值进行排序 此代码中还展示了为DataFrame添加列,即直接n ...
- 找出numpy array数组的最值及其索引
在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引 但在numpy中的array没有index方法,取而代之的是where ...
- 3.MySQL优化---单表查询优化的一些小总结(非索引设计)
整理自互联网.摘要: 接下来这篇是查询优化.其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解.本篇会先讲单表查询优化(非索引设计).然后讲多表查询优化.索引优化设计以及库表 ...
- Sublime文本排序&查找重复行&删除重复行
排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...
随机推荐
- Oracle 常用
1. 级联查询 在ORACLE 数据库中有一种方法可以实现级联查询select * //要查询的字段from table //具有子接点ID与父 ...
- Unix/Linux中Cron的用法
cron是unix或者linux下用来定时任务的命令,大致的用法如下: 1.服务的启动和关闭 /sbin/service crond start //启动服务 /sbin/service cr ...
- h5-localStorage实现缓存ajax请求数据
使用背景:要实现每次鼠标hover“能力雷达”,则显示能力雷达图(通过ajax请求数据实现雷达图数据显示),所以每次hover都去请求ajax会影响性能,因此这里要用到本地缓存. 实现: 此处是通过传 ...
- Python __setitem__()、__getitem__()、__delitem__()
转载:http://blog.csdn.net/xhw88398569/article/details/48690163 __xxxitem__:使用 [''] 的方式操作属性时被调用 __setit ...
- 20170520 BADI增强学习
一.要求:Tcode:FF_5 导入数据运行时,产生财务凭证之前修改某些字段值.Exmp:FEBRE-VWEZWBKPF-XBLNRFEBEP-CHECTBSEG-ZUONR there is a b ...
- ABAP rfc 发布webservice 错误
一.SICF 测试服务报错: 哎呀,找不到网页! 网站在检索此网址时出现错误.托管此网站的服务器可能关闭进行维护或配置不正确. HTTP ERROR 500
- Oracle 11G无法导出空表的解决办法
11G中有个新特性,当表无数据时,不分配segment,以节省空间解决方法:1.insert一行,再rollback就产生segment了.该方法是在在空表中插入数据,再删除,则产生segment.导 ...
- 3.6中的range()
在python3中range()是这样的: >>> range(4) range(0, 4) #额,列表跑哪去了 在之前的python2中是这样的: >>> ran ...
- Linux常用指令——周琛
ps ax | grep java 查看进程命令里带“java”字样的进程信息,第一列是进程号 kill -9 1234 强制杀死1234号进程 cd /xxx/xxx 进入/xxx/xxx目录 cd ...
- maven使用(一)
在官网上下载maven的包http://maven.apache.org/download.cgi 下载压缩包apache-maven-3.3.9-bin.zip 在环境变量中新建变量: M2-HOM ...