numpy判断数值类型、过滤出数值型数据的方法


Posted in Python onJune 09, 2018

numpy是无法直接判断出由数值与字符混合组成的数组中的数值型数据的,因为由数值类型和字符类型组成的numpy数组已经不是数值类型的数组了,而是dtype='<U11'。

1、math.isnan也不行,它只能判断float("nan"):

>>> import math 
>>> math.isnan(1) 
False 
>>> math.isnan('a') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: a float is required 
>>> math.isnan(float("nan")) 
True 
>>>

2、np.isnan不可用,因为np.isnan只能用于数值型与np.nan组成的numpy数组:

>>> import numpy as np 
>>> test1=np.array([1,2,'aa',3]) 
>>> np.isnan(test1) 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could 
 not be safely coerced to any supported types according to the casting rule ''sa 
fe'' 
>>> test2=np.array([1,2,np.nan,3]) 
>>> np.isnan(test2) 
array([False, False, True, False], dtype=bool) 
>>>

解决办法:

方法1:将numpy数组转换为python的list,然后通过filter过滤出数值型的值,再转为numpy, 但是,有一个严重的问题,无法保证原来的索引

>>> import numpy as np 
>>> test1=np.array([1,2,'aa',3]) 
>>> list1=list(test1) 
>>> def filter_fun(x): 
... try: 
...  return isinstance(float(x),(float)) 
... except: 
...  return False 
... 
>>> list(filter(filter_fun,list1)) 
['1', '2', '3'] 
>>> np.array(filter(filter_fun,list1)) 
array(<filter object at 0x0339CA30>, dtype=object) 
>>> np.array(list(filter(filter_fun,list1))) 
array(['1', '2', '3'], 
 dtype='<U1') 
>>> np.array([float(x) for x in filter(filter_fun,list1)]) 
array([ 1., 2., 3.]) 
>>>

方法2:利用map制作bool数组,然后再过滤数据和索引:

>>> import numpy as np
>>> test1=np.array([1,2,'aa',3])
>>> list1=list(test1)
>>> def filter_fun(x):
... try:
...  return isinstance(float(x),(float))
... except:
...  return False
...
>>> import pandas as pd
>>> test=pd.DataFrame(test1,index=[1,2,3,4])
>>> test
 0
1 1
2 2
3 aa
4 3
>>> index=test.index
>>> index
Int64Index([1, 2, 3, 4], dtype='int64')
>>> bool_index=map(filter_fun,list1)
>>> bool_index=list(bool_index) #bool_index这样的迭代结果只能list一次,一次再list时会是空,所以保存一下list的结果
>>> bool_index
[True, True, False, True]
>>> new_data=test1[np.array(bool_index)]
>>> new_data
array(['1', '2', '3'],
 dtype='<U11')
>>> new_index=index[np.array(bool_index)]
>>> new_index
Int64Index([1, 2, 4], dtype='int64')
>>> test2=pd.DataFrame(new_data,index=new_index)
>>> test2
 0
1 1
2 2
4 3
>>>

以上这篇numpy判断数值类型、过滤出数值型数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python中的闭包
Jul 08 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
在keras中实现查看其训练loss值
Jun 16 Python
如何通过命令行进入python
Jul 06 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
python多线程方法详解
Jan 18 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 #Python
pandas 小数位数 精度的处理方法
Jun 09 #Python
Numpy数据类型转换astype,dtype的方法
Jun 09 #Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 #Python
浅谈DataFrame和SparkSql取值误区
Jun 09 #Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 #Python
pandas Dataframe行列读取的实例
Jun 08 #Python
You might like
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
php array_map()函数实例用法
2021/03/03 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Fabric 应用案例
2016/08/28 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
Python多继承顺序实例分析
2018/05/26 Python
python实现内存监控系统
2021/03/07 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
python超时重新请求解决方案
2019/10/21 Python
静态变量和实例变量的区别
2015/07/07 面试题
护理专业自荐信范文
2014/02/26 职场文书
外贸专业求职信
2014/03/09 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
卖房协议书样本
2014/10/30 职场文书
Nginx源码编译安装过程记录
2021/11/17 Servers