Pandas缺失值inf与nan处理实践
1. Pandas缺失值
对于表格数据而言,缺失值分为三种:
- 一是Pandas中的空值(NaN)
- 二是Pandas中的正负无穷(inf),严格意义上也不算缺失值,表示无穷!
- 三是自定义的缺失值。
1.1. Pandas中的空值
Pandas中的空值有三个:np.nan (Not a Number) 、 None 和 pd.NaT(时间格式的空值,注意大小写不能错),这三个值可以用Pandas中的函数isnull(),notnull(),isna()进行判断。
isnull()和notnull()的结果互为取反,isnull()和isna()的结果一样。
需要特别注意三点:
- 如果某一列数据全是空值且包含pd.NaT,np.nan和None会自动转换成pd.NaT。
- 空值(np.nan、None、pd.NaT)既不是空字符串"“,也不是空格” "。
- None是 一个 Python 对象
不可以用在任意的 NumPy 或 Pandas 数组里,只用于列表且数据类型是 Object。
默认 Pandas 会将 None 转换成 NAN
对包含 None 元素的数组进行计算(如: sum, min, max)会抛出 TypeError 异常。
import pandas as pd
import numpy as npdf = pd.DataFrame({'float': [1.3,5.2,np.nan],'int': [1,8,None],'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,pd.NaT],'string': ['python','pandas','numpy']})
例如通过df.isnull()查看缺失情况。
1.2. Pandas中的正负无穷
对于特别大的数字,或者除数为0时,将产生正负无穷,Pandas中用np.inf表示。
import pandas as pd
import numpy as npdf = pd.DataFrame({'float': [1.3,5.2,np.nan],'int': [1,8,None],'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,pd.NaT],'string': ['python','pandas','numpy']})
df['inf'] = df['float']/0
1.3. 自定义缺失值
自定义缺失值有很多不同的形式,如上面刚说的空字符串和空格(当然,一般不用这两个,因为看起来不够直观)。
在获取数据时,可能会有一些数据无法得到,也可能数据本身就没有,造成了缺失值。对于这些缺失值,在获取数据时通常会用一些符号之类的数据来代替,如问号?,斜杠/,字母NA等。
2. 处理缺失数据
2.1. 用数组过滤
- 用 df.isin([np.nan, np.inf, -np.inf]) 方法
- 用 df.any() 方法只要包含任意一个缺失的值,any()一个序列中满足一个True,则返回True
- 最后,用 布尔数组来进行切分。
import pandas as pd
import numpy as npdf = pd.DataFrame({'float': [1.3,5.2,np.nan],'int': [1,8,None],'datetime': [pd.Timestamp('2018-03-10'),pd.Timestamp('2019-05-10'),pd.NaT],'string': ['python','pandas','numpy']})
df[~df.isin([np.nan, np.inf, -np.inf]).any(axis=1)]
2.2. 替换 inf 和 -inf 成 NaN, 然后选择非空的行数据
- 用df.replace([np.inf, -np.inf], np.nan),把正负无穷为空值np.nan
- 再用df.notnull(),筛选非空数据
- 再用df.all(),all()一个序列中所有值为True时,返回True,否则为False。
import pandas as pd
import numpy as npdf = pd.DataFrame({'float': [1.3,5.2,np.inf],'int': [1,8,None],'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,pd.Timestamp('2019-05-10')],'string': ['python','pandas','numpy']})
dfdf['inf'] = df['float']/0
dfdf['inf'].replace(np.inf, 0, inplace=True)
dfdf[df.replace([np.inf, -np.inf], np.nan).notnull().all(axis=1)]
#df[df.notnull().all(axis=1)]
2.3. 替换 inf 和 -inf 成 NaN,再用dropna() 方法删除为空的数据
pandas中的dataframe对象,删除缺失值的方式:
- df.dropna(how=‘all’) #删除所有内容均为缺失值的行
- df.dropna(axis=1) #丢弃有缺失值的列
- df.dropna(axis=1, how = ‘all’) #丢弃所有列中所有值均缺失的列
import pandas as pd
import numpy as npdf = pd.DataFrame({'float': [1.3,5.2,np.inf],'int': [1,8,None],'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,pd.Timestamp('2019-05-10')],'string': ['python','pandas','numpy']})
df['inf'] = df['float']/0
dfdf.dropna(axis=1).head(3)df.replace([np.inf, -np.inf], np.nan).dropna(axis=1).head(3)
或者:
- 将某1列(series格式)中的 inf 替换为数值
import numpy as npdf['Col'][np.isinf(df['Col'])] = -1
- 将某1列(series格式)中的 inf 替换为NA值
import numpy as npdf['Col'][np.isinf(df['Col'])] = np.nan
2.4. 用df.fillna(value=values) 将缺失的数据进行填充
填充缺失值:
- fillna(method=‘ffill’/‘bfill’, # ffill向前填充;bfill向后填充。
axis=0/1 # 按行/列进行填充
)
例如:
- data.fillna(0, inplace=True) # 填充0
- data.fillna(method=‘ffill’) # 按列,向前进行填充
- data.fillna(method=‘bfill’,axis=1) # 按照行,向后进行填充
- data.fillna(data.mean()) # 填充平均值
import pandas as pd
import numpy as npdf = pd.DataFrame({'A':[1,np.nan],'B':[21,3],'C':[4,5]})
#制造inf
df['D'] = df['C']/0
print(df)
#替换正inf为NaN
df.replace(np.inf, np.nan, inplace=True)
df['E'] = -df['B']/0
print(df)
#替换正、负inf为0
df.replace([np.inf, -np.inf], 0, inplace=True)
#单列替换NaN为10
df['A'].fillna(10, inplace=True)
#替换NaN为0
df.replace(np.nan, 0, inplace=True)
print(df)
3. Pandas处理缺失值函数小结
isnull和notnull: 检测是否是空值,可用于dataframe和Series
dropna: 丢弃,删除缺失值
- axis: 删除行还是列,{0 ro ‘index’, 1 or ‘columns’}, default 0
- how: 如果等于any则任何值为空都删除,如果等于all则所有值都为空时才删除
- inplace: 如果为True则修改当前dataframe, 否则返回新的dataframe
fillna: 填充空值
- value: 用于填充的值,可以是单个值,或者字典(key是列名,value是值)
- method: 等于ffill使用前一个部位空的值填充forword fill; 等于bfill使用后一个部位空的值天充backword fill
- axis: 按行还是按列填充,{0 ro ‘index’, 1 or ‘columns’}
- inplace: 如果为True则修改当前dataframe, 否则返回新的dataframe
replace: 替换,replace(to_replace, value) 前面是需要替换的值,后面是替换后的值。
- inplace: 如果为True则修改当前dataframe, 否则返回新的dataframe
参考:
[1]. wumingxiaoyao. Python 玩转数据 18 - Pandas 数据清洗 处理缺失值 None NA NaN inf dropna fillna isin isnull. CSDN博客. 2022.04
[2]. data_amateur. Python pandas中缺失值的种类(None、NA、NaN)及删除方式. CSDN博客. 2020.07
[3]. adam_hong. pandas 处理inf. 简书. 2021.10
[4]. 小斌哥ge. Pandas知识点-缺失值处理. 知乎. 2021.05
Pandas缺失值inf与nan处理实践相关推荐
- pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失标签、插值填充详解及实例
pandas dataframe缺失值(np.nan)处理:识别缺失情况.删除.0值填补.均值填补.中位数填补.加缺失标签.插值填充详解及实例 isnull().natna().isna().fill ...
- 使用KNN进行缺失值填补详解及实践
使用KNN进行缺失值填补详解及实践 使用KNN进行缺失值填补详解及实践 数据缺失填充方式分为很多种: 删除法.均值法.回归法.KNN.MICE.EM等等.R语言包中在此方面比较全面,python稍差. ...
- 数据预处理+缺失值处理方案+Missing Value+pandas+缺失值填充方法、方案
数据预处理+缺失值处理方案+Missing Value+pandas+缺失值填充方法.方案 缺失值+sklearn from sklearn.preprocessing import Imputer ...
- pytorch笔记: 处理inf和nan数值
import torch import numpy as np a = torch.Tensor([[1, 2, np.nan], [np.inf, np.nan, 4], [3, 4, 5]]) ' ...
- python 温度插值nan处理_Python处理inf和Nan值,pytorch,nan,数值
在构建网络框架后,运行代码,发现很多tensor出现了inf值或者nan,在很多博客上没有找到对应的解决方法,大部分是基于numpy写的,比较麻烦.下面基于torch BIF函数实现替换这2个值. a ...
- python判断nan格式_关于Python中Inf与Nan的判断问题详解
大家都知道 在Python 中可以用如下方式表示正负无穷: float("inf") # 正无穷 float("-inf") # 负无穷 利用 inf(infi ...
- c语言中出现nan错误,c语言中浮点运算的inf和nan错误
============================================ 作者:yuanlulu http://blog.csdn.net/yuanlulu 版权没有,但是转载请保留此 ...
- c语言isfinite_inf是什么意思,C语言中INF和NAN是什么意思
C语言当中的nan表示not a number,等同于 #IND:indeterminate (windows) 自定义函数: int isNumber(double d){return (d==d) ...
- c语言输出 inf是什么意思,cuffdiff 输出文件中的inf和nan的意思
cuffdiff 输出文件(gene_exp.diff)中有的log2(FPKMy/FPKMx)值为inf或者-inf,有的test stat值为nan或-nan,他们的意思其实是来源于C语言.其中: ...
- 神经网络训练出现 Inf 或 NaN
问题描述: 神经网络训练出现 Inf 或 NaN Seed: 19 --- Hyper-parameters for training --- learning_rate: 0.002 crop_si ...
最新文章
- Android基础---学习历程【上课用到的资源---学期!汇总!整理】【课本源码、课后习题答案、上课课件与录播】
- OSGi Bundle之Hello World
- [转]SQL Server 2000执行计划成本(1/5)
- wkhtmltopd 下载安装以及php环境下的使用
- postman生成python代码_别再用手敲了,这个工具可以自动生成python爬虫代码
- 【Python】 Python 基础
- 微信小程序 ----- this.getOpenerEventChannel is not a function
- 文件下载的java代码_文件下载java代码实现
- Codeforces 1043F(容斥+dp)
- 获取位置_原神蜥蜴尾巴怎么获得 蜥蜴尾巴获取位置分享
- ZooKeeper 相关概念以及使用小结
- JVM(1.8)GC日志解析与分析
- 禁用U盘等移动设备的自动播放
- PHP生成海报/PHP合并图片/PHP图片处理
- 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】
- H2教程系列(二) 创建数据库
- 图形学基础|球谐光照(Spherical Harmonics Lighting)
- 2020040920200418知交零落实是人生常态
- Linux:syscall: entry_SYSCALL_64_after_hwframe
- cad一键卸载工具叫什么_autodesk软件一键卸载工具
热门文章
- 【题解】选数字 [51nod1354]
- 四、文件信息 五、进程环境
- Android图片轮播控件——Banner
- ubuntu16.04,exFAT格式U盘无法打开解决方式
- 澳大利亚麦考瑞大学计算机系杨坚教授团队招收2022-2023年博士研究生
- 从GitHub火到了CSDN,共计1658页的《Java岗面试核心MCA版》
- ps去水印(操作流程)
- 海关179号出口清单报文CEB603Message描述规范
- python forward函数_Python——函数
- FX3U和三菱伺服控制的框架标准程序 回原点、JOG手动、绝对定位、相对定位、控制等部分