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奇技淫巧13招【实用】
Dec 14 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
python验证码识别实例代码
Feb 03 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
在python中使用nohup命令说明
Apr 16 Python
Python实现仿射密码的思路详解
Apr 23 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
dojo 之基础篇
2007/03/24 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
JavaScript DOM事件(笔记)
2015/04/08 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
django框架自定义用户表操作示例
2018/08/07 Python
浅谈python之新式类
2018/08/12 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
《望庐山瀑布》教学反思
2014/04/22 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
社区文艺活动方案
2014/08/19 职场文书
医院见习报告范文
2014/11/03 职场文书
单位推荐信范文
2015/03/27 职场文书
紫日观后感
2015/06/05 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
2022年显卡天梯图(6月更新)
2022/06/17 数码科技