python中的NaN在质量控制中怎么处理?

2023-09-22 15:49:07

一、数据中的缺省值

气象数据中经常存在缺省值,比如未入库的站点数据、比如海温格点实况数据中的陆地区域。这些缺省值往往被赋予NaN(Not a Number,非数)。NaN是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。
这些NaN值一般需要在计算时被去除掉,以免影响计算结果。那么,该怎么去除呢?

二、NaN的定义和特点

(一)如何设置nan

这里介绍两种方法设置一个变量为nan。

a = float('nan')
import numpy as np
a = np.nan

(二)如何判断一个数是nan

和设置nan的方式对应,也可以用np和math两种库函数来判断一个变量是否为nan。

import numpy
a = np.nan
if np.isnan(a):
    print('这是个NaN!')
import math
a = math.nan
if math.isnan(a):
    print('这是个NaN!')

需要说明一下,直接用==来判断是不行的。
在这里插入图片描述

(三)NaN的特点

NaN因为是Not a Number,所以它和所有数字变量(包括整数和浮点数,不论大小和正负)的所有判断(包括大于、小于和等于)都会返回false。
在这里插入图片描述
它和所有数字变量(包括整数和浮点数,不论大小和正负)的所有运算都会返回nan。
在这里插入图片描述

三、处理数据中的NaN

我这里把常用气象数据分为站点数据(一般存为dataframe格式)和格点数据(一般存为array、dataarrray或dataset格式)。
先编一个站点数据,设置一个数值为NaN。

import pandas as pd
import numpy as np
import datetime
df = pd.DataFrame({'台站名称':['59948']*5,'气温':[round(i,1)+25 for i in np.random.normal(0, 1, [5]).tolist()]})
df['时间'] = pd.date_range("2022-02-13 11", periods=5, freq='m')
df.loc[0,'气温'] = np.nan

在这里插入图片描述
再编一个格点数据存为array,设置一个数值为NaN。

data = np.random.rand(3, 3)
data[1,1] = np.nan 

在这里插入图片描述
在array的基础上构造dataarray。

#构造DataArray
import numpy as np
import xarray as xr
lat = [31,32,33]
lon = [121,123,125]
da = xr.DataArray(data, coords=[lat, lon], dims=["lat", "lon"])
da.name = 'data'
print(da)

在这里插入图片描述
在dataarrray的基础上构造dataset。

ds = da.to_dataset(name = 'data')

在这里插入图片描述

(一)利用nan的特性在质控中直接去除

如果是想从数据中直接去除nan。那么,我们可以利用nan的“和所有数字变量(包括整数和浮点数,不论大小和正负)的所有判断(包括大于、小于和等于)都会返回false。”的特点,把去除nan这个步骤放在质量控制中常用的范围筛选中,直接筛除掉。
对dataframe格式:

df = df[df['气温']<50]

在这里插入图片描述
对array格式:

data[np.where(data<50)]

在这里插入图片描述
可以看到虽然nan值被去除掉了,但是3*3的array的形状已经变了(对于气象格点数据,二维的数据的每个点都自带经度和纬度,所以形状很重要,形状变了理解起来都困难了)。如果后续要做矩阵运算什么的,就不咋方便了。前面也说过,nan和数字之间的任何运算都返回nan,所以,大部分时候矩阵做加减乘除等运算,正常的点返回正常的计算值,nan返回nan,互不影响。不去除nan也不错。

对dataarray和dataset:
不能删除nan,只能替换nan。

xr.where(da <50,da,0)

在这里插入图片描述
嗯,这样替代还不如不代呢。
对dataset甚至还有筛选条件后设置为nan的代码:

ds.where(ds.data < 50, drop=True)
更多推荐

大话数据结构 2 算法

算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作算法的五个基本特性:输入、输出、有穷性、确定性、可行性1.输入输出:算法具有0个或多个输入,算法至少有1个或多个输出。2.有穷性:指算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成

JUC相关面试题

👏作者简介:大家好,我是爱发博客的嗯哼,爱好Java的小菜鸟🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦📝社区论坛:希望大家能加入社区共同进步🧑‍💼个人博客:智慧笔记📕系列专栏:面试宝典本文引自黑马程序员Java面试宝典JUC基础薄弱的可以先看JUC详解文章目录面试官:聊一下并行和并发有什么

干货:数据仓库基础知识(全)

1、什么是数据仓库?权威定义:数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。1)数据仓库是用于支持决策、面向分析型数据处理;2)对多个异构的数据源有效集成,集成后按照主题进行重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。面对大数据的多样性,在存储和处理这些大数据

【算法】单调栈

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

JAVA开发技术能力和学历哪个重要?

Java开发技术能力和学历都是Java开发人员必须具备的基本条件,二者之间没有谁更加重要的绝对答案。不同的人在不同的时期,所处的不同环境下会给出不同的答案。下面从多个角度进行讨论,探究Java开发技术能力和学历哪个更重要。1、招聘角度从企业的招聘需求来看,技术能力在某些情况下更为重要。随着科技的不断发展,对于一些前沿技

8位微控制器上的轻量级SM2加密算法实现:C语言详细指南与完整代码解析

引言在当今的数字化世界中,安全性是每个系统的核心。无论是智能家居、医疗设备还是工业自动化,每个设备都需要确保数据的安全性和完整性。对于许多应用来说,使用高级的微控制器或处理器可能是不切实际的,因为它们可能会增加成本、功耗和尺寸。这就是为什么8位微控制器仍然在许多应用中占据着重要的地位。但是,8位微控制器的计算能力有限,

天翎知识管理系统:支持多种文件类型,整合各类知识资源

编者按:知识管理系统支持多种格式可以更好地适应不同的业务需求和行业规范,同时也可以避免文件格式不兼容带来的麻烦。本文将介绍天翎知识管理系统的文件类型支持,包括文档格式的在线预览及在线编辑,以便用户可以更全面地了解天翎系统。知识管理系统文件类型支持在线预览天翎知识管理系统支持多种文档格式在线预览,可以让用户在不下载文档的

Mybatis面试题(三)

文章目录前言一、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?二、当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定pojo?三、模糊查询like语句该怎么写四、通常一个Xml映射文件,都会写一个Dao接口与之对应,Dao的工作原理,是否可以重载

安卓毕业设计各种app项目,Android毕设设计,Android课程设计,毕业论文

作为一位从事软件开发多年的专业人士,您积累了丰富的经验和技能,解决了许多不同类型的问题。除了开发原创项目,您还愿意分享您的知识,指导实习生和在校生。这种乐于助人的行为对于行业的发展和新一代软件开发者的成长都起着积极的促进作用。辅导实习生或在校生有许多好处。首先,您可以通过与他们分享您的经验和见解,帮助他们更好地理解软件

Zookeeper运维

我是一个目录1.参数说明2.Zookeeper优化建议3.Zookeeper性能查看4.建议1.参数说明工作节点瞬间压力大,导致和集群通信出现延迟,被踢出节点,瞬间释放的连接立即又连接到另外节点,最终集群挂掉。加了一些延迟配置后,集群稳定。参数说明tickTime=2000Zookeeper服务器之间或客户端与服务器之

BD就业复习第四天

1.布隆过滤器怎么实现去重布隆过滤器是一种用于快速检查一个元素是否可能存在于一个大集合中的数据结构,但它并不适用于精确去重。因为布隆过滤器具有一定的误判率(可能会将不存在的元素误判为存在),所以不能确保完全的去重。但可以结合其他数据结构来实现近似的去重功能。以下是使用布隆过滤器进行近似去重的一般步骤:初始化布隆过滤器:

热文推荐