广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何将numpy二维数组中的np.nan值替换为指定的值
  • 241
分享到

如何将numpy二维数组中的np.nan值替换为指定的值

2024-04-02 19:04:59 241人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

基础知识: (1)np.nan表示该值不是一个数,比如数据中收入、年龄的缺失值;np.inf表示无穷大 (2)np.nan == np.nan 的结果为False (3)nan与任何

基础知识:

(1)np.nan表示该值不是一个数,比如数据中收入、年龄的缺失值;np.inf表示无穷大

(2)np.nan == np.nan 的结果为False

(3)nan与任何数的操作结果均为nan,例如sum((np.nan,4)) 的结果为nan

(4)一个ndarray数组t1,可以用np.isnan(t1) 定位到nan值的位置,再用t1[np.isnan(t1)] = 指定值 将nan替换为指定值

(5)np.nan_to_num(t1),可以将t1中的nan替换为0

(6)t1[ t1 == t1]可以剔除所有nan只保留非nan值

现在生成一个3*4的数组,设定第1行,第2、3列位置两个元素为np.nan


import numpy as np
t1 = np.arange(12).reshape(3,4).astype('float')
t1[1,2:] = np.nan
print(t1)

[[ 0. 1. 2. 3.]

[ 4. 5. nan nan]

[ 8. 9. 10. 11.]]

1. 问题1:

如何将t1中的nan替换为0


#方法1:
for i in range(t1.shape[1]):
    col = t1[:,i]
    col[np.isnan(col)] = 0
#方法2:调用np.nan_to_num方法
t1 = np.nan_to_num(t1)
#方法3:或用np.isnan(t1)做索引,然后替换,建议用该方法
t1[np.isnan(t1)] = 0

方法3不但可以替换为0,替换为其它值也可,建议使用。

2. 问题2:

如何将t1中的nan替换为某些计算之后的值,例如将其替换为该列所有非 nan元素的均值

将原始数据中缺失的值替换为0有时未必是合适的。例如原始数据中某些人的年龄没有填,如果替换为0,将来在计算年龄平均值或做数据分析时就存在不合理的后果。此时,将年龄缺失的的人的年龄设为均值更为合理。

(1)方法1


#方法1:
for i in range(t1.shape[1]):
    col = t1[:,i]
    #当前列中如果存在nan,由于np.nan不等于np.nan,所以如果某列中存在nan,则col!=col将会有元素为True,np.count_nonzero方法将会累计值为True的元素数量,可以通过这种方法来判断该列是否存在nan
    nan_num = np.count_nonzero(col != col)
    if nan_num:
        not_nan_col = col[col == col] #用布尔矩阵col == col做索引来筛选矩阵,布尔矩阵中False位置的元素将被剔除。
        col[np.isnan(col)] = not_nan_col.mean()
print(t1)

运行结果:

[[ 0. 1. 2. 3.]

[ 4. 5. 6. 7.]

[ 8. 9. 10. 11.]]

(2)方法2


#方法2:np.nanmean方法可以计算非nan值的均值,此外还有np.nanmax, np.nanmin方法。所以上述程序可以改写如下:
mean = np.nanmean(t1,axis=0)
print('各列的均值为:%s' %mean)
for i in range(t1.shape[1]):
    col = t1[:,i]
    col[np.isnan(col)] = mean[i]
print(t1)

运行结果同上

(3)方法3

使用功能强大的pandas


#也可以用pandas来处理,更为简单便捷
import pandas as pd
df = pd.DataFrame(t1)
t1 = df.fillna(df.mean()).values  #values代替as_matrix(),可以将DataFrame转换为ndarray
print(t1)

运行结果同上。

补充:python 快速替换Numpy 中的Nan(空值)和inf (无限值)

在做数据处理的时候由于要保证数据的个数不变,需要把数据中的空值和无穷值替换为指定的值(此处为255),考虑到数据量比较大(50000000条数据),效率也是一个考虑因素。

下面主要给出了替换数据的核心代码


# +--+--+--+--+--+--+--+--+--+--+
print('Predict New Data......')
start = datetime.datetime.now()

dataPre = input_Data   # 此处输入需要处理的原始数据

# 0: 00:23.012951  标记了这个方法的时间(以50000000条数据为例)
dataPre0 = np.array(dataPre)
dataPre0[np.isnan(dataPre0)] = 255
dataPre0[np.isinf(dataPre0)] = 255

# 0:02:03.038840
dataPre1 = (dataPre)
dataPre1 = dataPre1.replace([np.inf, -np.inf], np.nan)
dataPre1 = dataPre1.fillna(value = 255)

# 0:02:03.140287
dataPre2 = (dataPre)
dataPre2 = (dataPre2.replace([np.inf, -np.inf], np.nan)).fillna(value = 255)    # shi yong te ding shuju tian chong

# 0:00:30.346661
dataPre3 = np.array(dataPre)
dataPre3[(dataPre3 == float('inf')) | (dataPre3 == float('-inf')) | (dataPre3 == float('nan'))] = 255

# 0:00:19.702519
dataPre4 = np.array(dataPre)
dataPre4[np.isinf(dataPre4)] = np.nan  # 将数组里面的无穷值转为空值
dataPre4[np.isnan(dataPre4)] = 255  # # 将nan值替换为255

# 0:01:10.404677
dataPre5 = np.array(dataPre)
dataPre5 = np.where(np.isnan(dataPre5), 255, dataPre5)
dataPre5 = np.where(np.isinf(dataPre5), 255, dataPre5)

可以看出几种方法的效率差别还是比较大的,尤其是使用了replace或者np.where函数的方法,比较慢。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 如何将numpy二维数组中的np.nan值替换为指定的值

本文链接: https://www.lsjlt.com/news/125900.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何将numpy二维数组中的np.nan值替换为指定的值
    基础知识: (1)np.nan表示该值不是一个数,比如数据中收入、年龄的缺失值;np.inf表示无穷大 (2)np.nan == np.nan 的结果为False (3)nan与任何...
    99+
    2022-11-12
  • php如何替换数组中的指定值
    本篇内容介绍了“php如何替换数组中的指定值”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.使用for循环替换数组中指定值使用for循环遍...
    99+
    2023-07-05
  • php如何替换数组的值为星号
    本篇内容主要讲解“php如何替换数组的值为星号”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何替换数组的值为星号”吧!可用array_splice()替换数组值为星号。若只想替换一个值,...
    99+
    2023-06-30
  • php怎么替换数组中的指定值?三种方法浅析
    在PHP编程中,替换数组中指定值是一个常见的操作。在本篇文章中,我们将会学习如何使用PHP编写代码以替换数组中指定值。我们将介绍以下内容:1.一个使用for循环来遍历数组和替换值的示例2.一个使用array_map()函数来替换数组中指定值...
    99+
    2023-05-14
    php数组 php
  • php如何替换数组中的一个值
    这篇文章主要讲解了“php如何替换数组中的一个值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何替换数组中的一个值”吧!替换方法:1、用“array_values($arr)”将指定...
    99+
    2023-06-30
  • php如何遍历数组替换数组中的元素值
    这篇文章将为大家详细讲解有关php如何遍历数组替换数组中的元素值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php遍历数组替换数组中元素值的方法:首先创建一个PHP示例文件;然后定义数组;最后通过“fo...
    99+
    2023-06-20
  • HTML中如何将class指定为一个适当的值
    本文小编为大家详细介绍“HTML中如何将class指定为一个适当的值”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML中如何将class指定为一个适当的值”文章能帮助大家解决疑惑,下面跟着小编的思路慢...
    99+
    2022-10-19
  • php如何去除二维数组中的某个值
    本文小编为大家详细介绍“php如何去除二维数组中的某个值”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何去除二维数组中的某个值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。去除步骤:1、循环遍历二维数组...
    99+
    2023-07-02
  • PHP如何删除数组中的指定值
    本篇内容主要讲解“PHP如何删除数组中的指定值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP如何删除数组中的指定值”吧!什么是PHP数组?在PHP中,数组是一种可以存储多个值的数据类型。数...
    99+
    2023-07-05
  • 如何将 NumPy/Numpy 数组转换为 PHP 函数中的变量?
    NumPy/Numpy 数组是Python中非常常用的数据结构,而PHP是另一种广泛使用的编程语言。因此,将 NumPy 数组转换为 PHP 函数中的变量是一项非常有用的技能。在本文中,我们将讨论如何实现这一目标。 首先,我们需要确保已经安...
    99+
    2023-09-17
    函数 numpy numy
  • php如何删除数组中的指定的值
    今天小编给大家分享一下php如何删除数组中的指定的值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在PHP中,数组是一种重要...
    99+
    2023-07-05
  • 如何将PHP中的二维数组转换成字符串
    随着Web开发领域的不断发展,PHP逐渐成为了Web开发中最受欢迎的语言之一。其中,2维数组是PHP编程中经常使用的一种数据类型。在开发过程中,我们有时候需要将2维数组转换成字符串,以方便在不同的程序之间进行数据传递和存储。本文将介绍如何将...
    99+
    2023-05-14
  • PHP如何实现二维数组中行和列的替换操作
    PHP中使用二维数组十分常见,不过在进行一些操作时可能需要对二维数组的行或列进行替换。本文将介绍在PHP中如何实现二维数组的行和列的替换操作。一、PHP二维数组二维数组是由多个一维数组组成的数组,可以想象成是一个表格。在PHP中可以使用ar...
    99+
    2023-05-14
  • Python 与 NumPy:如何将文件中的数字数据转换为数组?
    Python 是一种非常流行的编程语言,因其简单易用和功能强大而备受欢迎。它拥有丰富的库和工具,其中一个最常用的是 NumPy 库。NumPy 是一个 Python 库,用于处理大型多维数组和矩阵,它为 Python 提供了高效的数值计算...
    99+
    2023-11-04
    文件 关键字 numy
  • Python IDE中如何将不同类型的数据转换为二维码?
    随着二维码的普及,越来越多的应用场景需要我们将数据转换为二维码。Python是一种广泛应用于数据处理和分析的语言,也可以用来生成二维码。本文将介绍如何使用Python IDE将不同类型的数据转换为二维码。 安装qrcode库 要生成二...
    99+
    2023-10-30
    ide 数据类型 二维码
  • 利用java 如何实现求出一个二维数组中的最小值
    利用java 如何实现求出一个二维数组中的最小值?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java 求解二维数组列最小值比较二维数组列最小值,组成一个新数组返回。实现核...
    99+
    2023-05-31
    java 二维数组 ava
  • 如何将 NumPy 数组转换为 PHP 和 JavaScript 中的响应式数据结构?
    NumPy 是一个流行的 Python 库,用于科学计算和数据处理。它提供了一个多维数组对象,以及许多用于数组操作的函数和方法。但是,有时候我们需要将 NumPy 数组转换为 PHP 和 JavaScript 中的响应式数据结构,这样可以更...
    99+
    2023-11-11
    javascript 响应 numpy
  • 如何将第一个sql语句中的结果作为第二个 sql 的参数值
    如何将第一个sql语句中的结果作为第二个 sql 的参数值,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。需求:报表多个数据集,第二个数据集的参数需要引用第一个数据集的结果集作为...
    99+
    2023-06-04
  • 在MySQL中,我们如何将一个值从一种数字系统转换为另一种数字系统中的值?
    借助 MySQL CONV() 函数,可以将一种数字系统的值转换为另一种数字系统。语法CONV(N, from_base, to_base)这里,“N”是要转换的数字,“from_base”是该数字的当前基数,“to_bas...
    99+
    2023-10-22
  • 如何使用C#中的Enum.Parse函数将字符串转换为枚举类型的值
    如何使用C#中的Enum.Parse函数将字符串转换为枚举类型的值在C#中,枚举(Enum)是一种用于声明一组相关常量的数据类型。当我们需要将字符串转换为枚举类型的值时,可以使用Enum.Parse函数来实现。本文将详细介绍如何使用Enum...
    99+
    2023-11-18
    C# 字符串转换 EnumParse
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作