python中怎么把数据中inf转化为na

Python07

python中怎么把数据中inf转化为na,第1张

在使用numpy数组的过程中时常会出现nan或者inf的元素,可能会造成数值计算时的一些错误。这里提供一个numpy库函数的用法,使nan和inf能够最简单地转换成相应的数值。

numpy.nan_to_num(x): 

使用0代替数组x中的nan元素,使用有限的数字代替inf元素

使用范例:

>>>import numpy as np>>>a = np.array([[np.nan,np.inf],\...               [-np.nan,-np.inf]])>>>a

array([[  nan,   inf],

[  nan,  -inf]])>>>np.nan_to_num(a)

array([[ 0.00000000e+000,  1.79769313e+308],

[ 0.00000000e+000, -1.79769313e+308]])123456789

和此类问题相关的还有一组判断用函数,包括:

isinf

isneginf

isposinf

isnan

isfinite 

使用方法也很简单,以isnan举例说明:

>>>import numpy as np>>>np.isnan(np.array([[1, np.nan, np.inf],\...               [np.nan, -np.inf, -0.25]]))

array([[False,  True, False],

      [ True, False, False]], dtype=bool)

在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。

使用下面格式约定,引入pandas包:

pandas有两个主要数据结构:Series和DataFrame。

Series是一种类似于一维数组的对象,它由 一组数据 (各种NumPy数据类型)以及一组与之相关的 数据标签(即索引) 组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。

pd.Series(list,index=[ ]) ,第二个参数是Series中数据的索引,可以省略。

Series类型索引、切片、运算的操作类似于ndarray,同样的类似Python字典类型的操作,包括保留字in操作、使用.get()方法。

Series和ndarray之间的主要区别在于Series之间的操作会根据索引自动对齐数据。

DataFrame是一个表格型的数据类型,每列值类型可以不同,是最常用的pandas对象。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index为指定的列、行索引,并按照顺序排列。

如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值:

数据索引 :Series和DataFrame的索引是Index类型,Index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、操作实现自动化对齐。索引类型index的常用方法:

重新索引 :能够改变、重排Series和DataFrame索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。

df.reindex(index, columns ,fill_value, method, limit, copy ) :index/columns为新的行列自定义索引;fill_value为用于填充缺失位置的值;method为填充方法,ffill当前值向前填充,bfill向后填充;limit为最大填充量;copy 默认True,生成新的对象,False时,新旧相等不复制。

删除指定索引 :默认返回的是一个新对象。

.drop() :能够删除Series和DataFrame指定行或列索引。

删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。

如果删除的是列索引,需要增加axis=1或axis='columns'作为参数。

增加inplace=True作为参数,可以就地修改对象,不会返回新的对象。

在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,表5-4进行了总结

适用于Series和DataFrame的基本统计分析函数 :传入axis='columns'或axis=1将会按行进行运算。

.describe() :针对各列的多个统计汇总,用统计学指标快速描述数据的概要。

.sum() :计算各列数据的和

.count() :非NaN值的数量

.mean( )/.median() :计算数据的算术平均值、算术中位数

.var()/.std() :计算数据的方差、标准差

.corr()/.cov() :计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。

.corrwith() :利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算),传入一个DataFrame则会计算按列名配对的相关系数。

.min()/.max() :计算数据的最小值、最大值

.diff() :计算一阶差分,对时间序列很有效

.mode() :计算众数,返回频数最高的那(几)个

.mean() :计算均值

.quantile() :计算分位数(0到1)

.isin() :用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中数据的子集

适用于Series的基本统计分析函数,DataFrame[列名]返回的是一个Series类型。

.unique() :返回一个Series中的唯一值组成的数组。

.value_counts() :计算一个Series中各值出现的频率。

.argmin()/.argmax() :计算数据最大值、最小值所在位置的索引位置(自动索引)

.idxmin()/.idxmax() :计算数据最大值、最小值所在位置的索引(自定义索引)

pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv()、read_table()、to_csv()是用得最多的。

在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。

在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值)。

替换值

.replace(old, new) :用新的数据替换老的数据,如果希望一次性替换多个值,old和new可以是列表。默认会返回一个新的对象,传入inplace=True可以对现有对象进行就地修改。

删除重复数据

利用函数或字典进行数据转换

df.head():查询数据的前五行

df.tail():查询数据的末尾5行

pandas.cut()

pandas.qcut() 基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。

pandas.date_range() 返回一个时间索引

df.apply() 沿相应轴应用函数

Series.value_counts() 返回不同数据的计数值

df.aggregate()

df.reset_index() 重新设置index,参数drop = True时会丢弃原来的索引,设置新的从0开始的索引。常与groupby()一起用

numpy.zeros()

可以使用 [] 符号直接按位置进行索引,如果索引超过字符串的长度,结果将是 NaN

在 0.23 版本之前, extract 方法的参数 expand 默认为 False 。当 expand=False 时, expand 会根据正则表达式模式返回一个 Series 、 Index 或 DataFrame

当 expand=True 时,它总是返回一个 DataFrame ,这种方式更加符合用户的需求,从 0.23.0 版本开始就是默认的

extract 方法接受一个至少包含一个捕获组的正则表达式

如果是包含多个组的正则表达式将返回一个 DataFrame ,每个捕获组是一列

未匹配的行会填充 NaN ,可以从混乱的字符串序列中提取出有规则的信息。

对于命名分组

对于可选的分组

注意 :正则表达式中的任何捕获组名称都将用作列名,否则将使用捕获组号

如果 expand=True ,则返回一个 DataFrame

如果 expand=False ,则返回一个 Series

对于索引,如果 expand=True ,且只有一个捕获组则返回一个只有一列的 DataFrame

此时,如果 expand=False 将会返回一个 Index

对于索引,正则表达式设置多个分组将返回 DataFrame

如果 expand=False 将会抛出 ValueError 异常

对于 extract 只返回第一个匹配项

与 extract 不同, extractall 方法返回每个匹配项,其结果始终是具有 MultiIndex 的 DataFrame 。

MultiIndex 的最后一级名为 match ,标示的是匹配的顺序

对于只有一个匹配的 Series

extractall(pat).xs(0, level='match') 与 extract(pat) 的结果一致

Index 也支持 .str.extractall ,它返回一个 DataFrame ,其结果与 Series.str 相同。

您可以检查字符串元素中是否包含正则匹配模式

或者字符串元素是否与模式匹配

而在 1.1.0 版本中

注意 :

match 、 fullmatch 和 contains 之间的区别是:

这三个函数于 re 模块的 re.fullmatch 、 re.match 和 re.search 对应

像 match , fullmatch , contains , startswith 和 endswith 有一个额外的 na 参数,用于将缺失值替换为 True 或 False

您可以从字符串列中提取指标变量。例如,如果使用 '|' 分隔的字符串

字符串 Index 也支持 get_dummies ,它返回一个 MultiIndex