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原始套接字编程示例分享
Feb 21 Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
深入源码解析Python中的对象与类型
Dec 11 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
使用pyecharts在jupyter notebook上绘图
Apr 23 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 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
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
vue组件间通信子与父详解(二)
2017/11/07 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
windows下安装Python和pip终极图文教程
2017/03/05 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
介绍一下Ruby的特点
2013/01/20 面试题
学术会议邀请函
2015/01/30 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang