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提取html文件中的特定数据的实现代码
Mar 24 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
Django实现发送邮件找回密码功能
Aug 12 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
PyTorch的torch.cat用法
Jun 28 Python
python时间time模块处理大全
Oct 25 Python
弄清Pytorch显存的分配机制
Dec 10 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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
我的论坛源代码(一)
2006/10/09 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
深入解析Python中的线程同步方法
2016/06/14 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python3实现基于用户的协同过滤
2018/05/31 Python
利用nohup来开启python文件的方法
2019/01/14 Python
PyTorch中的Variable变量详解
2020/01/07 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
艺术用品:Arteza
2018/11/25 全球购物
生物制药毕业生自荐信
2013/10/16 职场文书
最美护士演讲稿
2014/08/27 职场文书
作文批改评语
2014/12/25 职场文书
募捐感谢信
2015/01/22 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
MySQL创建管理KEY分区
2022/04/13 MySQL