Pandas DataFrame中inf值的处理与替换方法
本文介绍在Pandas DataFrame计算中产生inf(无穷大)值的原因及处理方法。通过Numpy库提供的isinf、isposinf等函数定位inf位置,并演示如何将Series或整个DataFrame中的正负无穷大替换为指定数值或NaN,以适配机器学习算法对数据完整性的要求。
处理DataFrame中的inf值
在使用DataFrame进行变化率计算时,例如计算(今天-昨天)/昨天的公式中,若分母为0而分子为2,即(2-0)/0,计算结果会变为inf(无穷大)。
为了便于后续的数据处理流程,可以利用Numpy库的功能,将这些inf值进行替换或清洗。
第一种情况:将某一列(Series格式)中的inf值替换为具体的数值。
import numpy as np
df['Col'][np.isinf(df['Col'])] = -1第二种情况:将某一列(Series格式)中的inf值替换为NA(空值)。
import numpy as np
df['Col'][np.isinf(df['Col'])] = np.nan第三种情况:将整个DataFrame中的所有inf值替换为指定数值(处理空值的逻辑同理)。此处感谢评论区提供的补充建议。
import numpy as np
df.replace(np.inf, -1) #替换正inf为-1
#替换正负inf为NA,加inplace参数
df.replace([np.inf, -np.inf], np.nan, inplace=True)DataFrame处理inf值的相关技巧
Numpy中关于inf的相关文档说明
什么是inf?
inf代表IEEE 754浮点数标准中的正无穷大。
为什么会产生inf?
>>> np.NINF
-inf
>>> np.inf
inf
>>> np.log(0)
-inf
>>> np.array([1,2])/0 #碰到的最多的情况
array([ inf, inf])产生inf有什么好处?
目前看来,产生inf并没有明显的优势,它仅仅是用来表示无穷大这一概念,便于数学理解和表达。
产生inf有什么坏处?
对用户而言,处理inf需要特殊的手段,这增加了数据预处理的工作量。
之所以需要特殊处理,是因为许多机器学习算法库并不直接支持对inf值的计算或处理。
怎么处理?
常见的处理方法包括:
- 不处理
- 替换
如何获取inf所在的位置并进行填补?
isinf:用于显示哪些元素为正或负无穷大isposinf:用于显示哪些元素为正无穷大isneginf:用于显示哪些元素为负无穷大isnan:用于显示哪些元素是非数字(NaN)isfinite:用于显示哪些元素是有限的(即既不是非数字,也不是正无穷大或负无穷大)
'''
>>> np.isinf(np.inf) #其他函数同理使用,isinf使用最多。
True
>>> np.isinf(np.array([1,np.inf]))
array([False, True], dtype=bool)
>>>np.isinf(pd.DataFrame(np.array([1,np.inf])))
0
0 False
1 True
>>>s1 = pd.Series([1,2,3,np.inf])
>>>s1
0 1.0
1 2.0
2 3.0
3 NaN
dtype: float64
#对inf填补 999
>>>s1[np.isinf(s1)] = 999
>>>s1
0 1.0
1 2.0
2 3.0
3 999.0
dtype: float64
#对inf填补np.nan (较为常用)
>>>s1[np.isinf(s1)] = np.nan
>>>s1
0 1.0
1 2.0
2 3.0
3 NaN
dtype: float64以上为个人经验分享,希望能给大家一个参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









