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 基础学习第二弹 类属性和实例属性
Aug 27 Python
如何将python中的List转化成dictionary
Aug 15 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
Python代码缩进和测试模块示例详解
May 07 Python
python批量赋值操作实例
Oct 22 Python
python三大神器之fabric使用教程
Jun 10 Python
Python表达式的优先级详解
Feb 18 Python
Python3的socket使用方法详解
Feb 18 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 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
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jQuery 处理表单元素的代码
2010/02/15 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
javascript数据类型详解
2017/02/07 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
python3实现跳一跳点击跳跃
2018/01/08 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python requests库用法实例详解
2018/08/14 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
python 三元运算符使用解析
2019/09/16 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
光声世纪笔试题目
2012/08/25 面试题
新护士岗前培训制度
2014/02/02 职场文书
事业单位年度考核评语
2014/12/31 职场文书